Skip to content

Commit ffab476

Browse files
committed
fix: Better error handling on no test code.
1 parent c9884e8 commit ffab476

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/worker.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,13 @@ export function runWorker(context: WorkerContext, notifier: (value: any) => void
168168
const { warmup, tests, index, iterations, errorThreshold } = context
169169

170170
// Require the original file to build tests
171-
const [name, testDefinition] = tests[index]
171+
const testToRun = tests?.[index]
172+
173+
if (!testToRun) {
174+
throw new Error('No test code exported from the worker thread')
175+
}
176+
177+
const [name, testDefinition] = testToRun
172178

173179
// Prepare the test
174180
let test: TestFunction = noOp

test/notTestExportedInWorkers.test.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { deepStrictEqual, ok } from 'node:assert'
2+
import { test } from 'node:test'
3+
import { isMainThread } from 'node:worker_threads'
4+
import { cronometro } from '../src/index.js'
5+
6+
if (isMainThread) {
7+
test('Errors are properly handled when no tests are exported in the worker threads', async () => {
8+
const results = await cronometro(
9+
{
10+
single() {},
11+
multiple() {}
12+
},
13+
{ iterations: 10, print: false }
14+
)
15+
16+
ok(!results.single.success)
17+
ok(results.single.error instanceof Error)
18+
deepStrictEqual(results.single.error.message, 'No test code exported from the worker thread')
19+
deepStrictEqual(results.single.size, 0)
20+
deepStrictEqual(results.single.min, 0)
21+
deepStrictEqual(results.single.max, 0)
22+
deepStrictEqual(results.single.mean, 0)
23+
deepStrictEqual(results.single.stddev, 0)
24+
deepStrictEqual(results.single.standardError, 0)
25+
deepStrictEqual(results.single.percentiles, {})
26+
27+
ok(!results.multiple.success)
28+
ok(results.multiple.error instanceof Error)
29+
deepStrictEqual(results.multiple.error.message, 'No test code exported from the worker thread')
30+
deepStrictEqual(results.multiple.size, 0)
31+
deepStrictEqual(results.multiple.min, 0)
32+
deepStrictEqual(results.multiple.max, 0)
33+
deepStrictEqual(results.multiple.mean, 0)
34+
deepStrictEqual(results.multiple.stddev, 0)
35+
deepStrictEqual(results.multiple.standardError, 0)
36+
deepStrictEqual(results.multiple.percentiles, {})
37+
})
38+
}

0 commit comments

Comments
 (0)