Skip to content

Commit f6d50f6

Browse files
committed
fix(report): add global QUnit errors to reporter
1 parent de8eef2 commit f6d50f6

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

listeners.js

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

89+
QUnit.on( "error", function( error ) {
90+
send( "error", { message: error.message, stack: error.stack } );
91+
} );
92+
8993
QUnit.on( "testEnd", function( data ) {
9094
send( "testEnd", data );
9195
} );

reporter.js

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

116+
export function reportError( error ) {
117+
console.error( chalk.red( `\n\nError: ${ error.message }` ) );
118+
console.error( chalk.gray( error.stack ) );
119+
return error;
120+
}
121+
116122
export function reportEnd( result, { descriptiveUrl, fullBrowser, id } ) {
117123
console.log(
118124
`\n\nTests finished in ${ prettyMs( result.runtime ) } ` +

run.js

Lines changed: 15 additions & 2 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";
@@ -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+
reportError( message.data );
114+
pendingErrors[ reportId ] ??= Object.create( null );
115+
pendingErrors[ reportId ][ message.data.message ] = message.data.stack;
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
@@ -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)