From 9e7060707ac2d577b7fd0dfe1e6a897b2dc54111 Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Fri, 10 Sep 2021 00:37:10 +0800 Subject: [PATCH] fix: Catch exit when Node.js failed --- fixtures/index-node.js | 7 +++++-- fixtures/request.js | 13 +++++++++++-- src/browser-drivers.ts | 12 ++++++------ src/index.ts | 2 +- src/platform-deno.ts | 1 + src/platform-node.ts | 1 + src/types.ts | 2 +- 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/fixtures/index-node.js b/fixtures/index-node.js index 0c0aa98..f5d96eb 100644 --- a/fixtures/index-node.js +++ b/fixtures/index-node.js @@ -10,8 +10,11 @@ global.fetch = fetch; async function main(file) { const tests = await import('./' + file + '.js'); - const result = await run.default(tests.default); + const result = await run(tests.default); process.send(result); } -main(process.argv[2]); +main(process.argv[2]) +.catch((error) => { + log.error(error); +}); diff --git a/fixtures/request.js b/fixtures/request.js index 28e98c1..88f8cc6 100644 --- a/fixtures/request.js +++ b/fixtures/request.js @@ -4,8 +4,17 @@ const tests = { async invalidURL() { try { new Request('http://example.com%'); - } catch ({name, message}) { - return {name, message}; + return {error: null}; + } catch (error) { + return {error: error.toString()}; + } + }, + async rejectCredentials() { + try { + new Request('http://user:pass@example.com'); + return {error: null}; + } catch (error) { + return {error: error.toString()}; } }, }, diff --git a/src/browser-drivers.ts b/src/browser-drivers.ts index d8d0b7b..c566cdd 100644 --- a/src/browser-drivers.ts +++ b/src/browser-drivers.ts @@ -44,12 +44,12 @@ export const safari: BrowserDriver = { path: '/usr/bin/safaridriver', args: (port: number, logLevel = 'warn') => { const logLevelArg = { - trace: '', - debug: '', - info: '', - warn: '', - error: '', - silent: '', + trace: 'trace', + debug: 'debug', + info: 'info', + warn: 'warn', + error: 'error', + silent: 'fatal', }[logLevel]; if (!logLevelArg) { throw new Error('invalid log level'); diff --git a/src/index.ts b/src/index.ts index c9e3a93..8a3cc69 100644 --- a/src/index.ts +++ b/src/index.ts @@ -46,7 +46,7 @@ function* tabularResults(results: Record): Iterable { yield [ `${group}:${result}:${key}`, n, - results[n][group][result][key].toString(), + results[n][group][result][key]?.toString() ?? 'null', ]; } } diff --git a/src/platform-deno.ts b/src/platform-deno.ts index 62374a8..16a14d3 100644 --- a/src/platform-deno.ts +++ b/src/platform-deno.ts @@ -11,6 +11,7 @@ export default class PlatformDeno implements Platform { const child = cp.spawn(binary, []); await new Promise((resolve, reject) => { child.once('error', reject); + child.once('exit', reject); child.once('spawn', resolve); }); child.kill(); diff --git a/src/platform-node.ts b/src/platform-node.ts index 19b7e2e..e273455 100644 --- a/src/platform-node.ts +++ b/src/platform-node.ts @@ -12,6 +12,7 @@ export default class PlatformNode implements Platform { ); const result: Result = await new Promise((resolve, reject) => { child.once('error', reject); + child.once('exit', reject); child.once('message', resolve); }); child.kill(); diff --git a/src/types.ts b/src/types.ts index 3c371fe..ff26c02 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -export type ResultObject = Record; +export type ResultObject = Record; export type Result = Record>; export interface Context {