diff --git a/listeners.js b/listeners.js index ef4a6bd..035a77c 100644 --- a/listeners.js +++ b/listeners.js @@ -86,6 +86,10 @@ // Send acknowledgement to the server. send( "ack" ); + QUnit.on( "error", function( error ) { + send( "error", { message: error.message, stack: error.stack } ); + } ); + QUnit.on( "testEnd", function( data ) { send( "testEnd", data ); } ); diff --git a/reporter.js b/reporter.js index ceef537..5cf23ba 100644 --- a/reporter.js +++ b/reporter.js @@ -113,6 +113,12 @@ export function reportTest( test, { fullBrowser, id } ) { } } +export function reportError( error ) { + console.error( chalk.red( `\n\nError: ${ error.message }` ) ); + console.error( chalk.gray( error.stack ) ); + return error; +} + export function reportEnd( result, { descriptiveUrl, fullBrowser, id } ) { console.log( `\n\nTests finished in ${ prettyMs( result.runtime ) } ` + diff --git a/run.js b/run.js index e754fdf..d29a46c 100644 --- a/run.js +++ b/run.js @@ -3,7 +3,7 @@ import { asyncExitHook, gracefulExit } from "exit-hook"; import { getLatestBrowser } from "./browserstack/api.js"; import { buildBrowserFromString } from "./browserstack/buildBrowserFromString.js"; import { localTunnel } from "./browserstack/local.js"; -import { reportEnd, reportTest } from "./reporter.js"; +import { reportEnd, reportError, reportTest } from "./reporter.js"; import { createTestServer } from "./createTestServer.js"; import { buildTestUrl } from "./lib/buildTestUrl.js"; import { generateHash, generateModuleId } from "./lib/generateHash.js"; @@ -106,6 +106,15 @@ export async function run( { } break; } + case "error": { + const reportId = message.id; + const report = reports[ reportId ]; + touchBrowser( report.browser ); + reportError( message.data ); + pendingErrors[ reportId ] ??= Object.create( null ); + pendingErrors[ reportId ][ message.data.message ] = message.data.stack; + break; + } case "runEnd": { const reportId = message.id; const report = reports[ reportId ]; @@ -127,6 +136,9 @@ export async function run( { return; } errorMessages.push( ...Object.values( pendingErrors[ reportId ] ) ); + if ( !errorMessages.length ) { + errorMessages.push( `Global failure in ${ report.url }` ); + } } // Run the next test @@ -351,7 +363,8 @@ export async function run( { gracefulExit( 0 ); } } else { - console.error( chalk.red( `${ errorMessages.length } tests failed.` ) ); + const len = errorMessages.length; + console.error( chalk.red( `${ len } test${ len > 1 ? "s" : "" } failed.` ) ); console.log( errorMessages.map( ( error, i ) => `\n${ i + 1 }. ${ error }` ).join( "\n" ) ); diff --git a/test/jquery b/test/jquery index ad7c370..e7535da 160000 --- a/test/jquery +++ b/test/jquery @@ -1 +1 @@ -Subproject commit ad7c3706f3f59bc962e424aae0425ad3e967e090 +Subproject commit e7535daa672ad5cf670087e8af1b1bc1731e844c