Skip to content

Commit 7f12fad

Browse files
authored
fix(report): add global QUnit errors to reporter (#6)
1 parent de8eef2 commit 7f12fad

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

listeners.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@
8686
// Send acknowledgement to the server.
8787
send( "ack" );
8888

89+
QUnit.on( "error", function( error ) {
90+
send( "error", {
91+
message: error.message,
92+
name: error.name,
93+
stack: error.stack
94+
} );
95+
} );
96+
8997
QUnit.on( "testEnd", function( data ) {
9098
send( "testEnd", data );
9199
} );

reporter.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,17 @@ export function reportTest( test, { fullBrowser, id } ) {
113113
}
114114
}
115115

116+
export function reportError( error ) {
117+
const title = `${ error.name || "Error" }: ${ error.message }`;
118+
let message = chalk.red( title );
119+
120+
// Chromium error stacks include the title in the first line,
121+
// but Firefox error stacks do not.
122+
message += `\n${ chalk.gray( error.stack.replace( `${ title }\n`, "" ) ) }`;
123+
console.error( `\n\n${ message }` );
124+
return message;
125+
}
126+
116127
export function reportEnd( result, { descriptiveUrl, fullBrowser, id } ) {
117128
console.log(
118129
`\n\nTests finished in ${ prettyMs( result.runtime ) } ` +

run.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { asyncExitHook, gracefulExit } from "exit-hook";
33
import { getLatestBrowser } from "./browserstack/api.js";
44
import { buildBrowserFromString } from "./browserstack/buildBrowserFromString.js";
55
import { localTunnel } from "./browserstack/local.js";
6-
import { reportEnd, reportTest } from "./reporter.js";
6+
import { reportEnd, reportError, reportTest } from "./reporter.js";
77
import { createTestServer } from "./createTestServer.js";
88
import { buildTestUrl } from "./lib/buildTestUrl.js";
99
import { generateHash, generateModuleId } from "./lib/generateHash.js";
@@ -85,10 +85,10 @@ export async function run( {
8585
const reportId = message.id;
8686
const report = reports[ reportId ];
8787
touchBrowser( report.browser );
88-
const errors = reportTest( message.data, report );
88+
const errorMessage = reportTest( message.data, report );
8989
pendingErrors[ reportId ] ??= Object.create( null );
90-
if ( errors ) {
91-
pendingErrors[ reportId ][ message.data.name ] = errors;
90+
if ( errorMessage ) {
91+
pendingErrors[ reportId ][ message.data.name ] = errorMessage;
9292
} else {
9393
const existing = pendingErrors[ reportId ][ message.data.name ];
9494

@@ -106,6 +106,15 @@ export async function run( {
106106
}
107107
break;
108108
}
109+
case "error": {
110+
const reportId = message.id;
111+
const report = reports[ reportId ];
112+
touchBrowser( report.browser );
113+
const errorMessage = reportError( message.data );
114+
pendingErrors[ reportId ] ??= Object.create( null );
115+
pendingErrors[ reportId ][ message.data.message ] = errorMessage;
116+
break;
117+
}
109118
case "runEnd": {
110119
const reportId = message.id;
111120
const report = reports[ reportId ];
@@ -127,6 +136,9 @@ export async function run( {
127136
return;
128137
}
129138
errorMessages.push( ...Object.values( pendingErrors[ reportId ] ) );
139+
if ( !errorMessages.length ) {
140+
errorMessages.push( `Global failure in ${ report.url }` );
141+
}
130142
}
131143

132144
// Run the next test
@@ -335,9 +347,9 @@ export async function run( {
335347
stop = true;
336348
console.error(
337349
chalk.red(
338-
`No tests were run with URL "${ report.url }" in ${ getBrowserString(
339-
report.browser
340-
) } (${ report.id })`
350+
`No tests were run with URL "${ report.url }" in ${
351+
report.fullBrowser
352+
} (${ report.id })`
341353
)
342354
);
343355
}
@@ -351,7 +363,8 @@ export async function run( {
351363
gracefulExit( 0 );
352364
}
353365
} else {
354-
console.error( chalk.red( `${ errorMessages.length } tests failed.` ) );
366+
const len = errorMessages.length;
367+
console.error( chalk.red( `${ len } test${ len > 1 ? "s" : "" } failed.` ) );
355368
console.log(
356369
errorMessages.map( ( error, i ) => `\n${ i + 1 }. ${ error }` ).join( "\n" )
357370
);

0 commit comments

Comments
 (0)