Skip to content

Commit c6f5f7f

Browse files
authoredDec 19, 2023
fix(runner): handle fixture teardown error (#4683)
1 parent e975b57 commit c6f5f7f

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed
 

‎packages/runner/src/fixture.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ export function withFixtures(fn: Function, testContext?: TestContext) {
8989
if (fixture.isFn) {
9090
// wait for `use` call to extract fixture value
9191
const useFnArgPromise = createDefer()
92+
let isUseFnArgResolved = false
9293
const fixtureReturn = fixture.value(context, async (useFnArg: unknown) => {
94+
isUseFnArgResolved = true
9395
useFnArgPromise.resolve(useFnArg)
9496
// suspend fixture teardown until cleanup
9597
const useReturnPromise = createDefer<void>()
@@ -100,7 +102,15 @@ export function withFixtures(fn: Function, testContext?: TestContext) {
100102
await fixtureReturn
101103
})
102104
await useReturnPromise
103-
}).catch(useFnArgPromise.reject) // treat fixture function error (until `use` call) as test failure
105+
}).catch((e: unknown) => {
106+
// treat fixture setup error as test failure
107+
if (!isUseFnArgResolved) {
108+
useFnArgPromise.reject(e)
109+
return
110+
}
111+
// otherwise re-throw to avoid silencing error during cleanup
112+
throw e
113+
})
104114
resolvedValue = await useFnArgPromise
105115
}
106116
else {

‎test/fails/fixtures/test-extend/fixture-error.test.ts

+13
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,16 @@ describe('correctly fails when test times out', () => {
5050
expect(a).toBe(2)
5151
}, 20)
5252
})
53+
54+
describe('error thrown during fixture teardown', () => {
55+
const myTest = test.extend<{ a: string }>({
56+
a: async ({}, use) => {
57+
await use("hello");
58+
throw new Error('Error fixture teardown')
59+
},
60+
})
61+
62+
myTest('no error in test', ({ a }) => {
63+
expect(a).toBe("hello");
64+
})
65+
})

‎test/fails/test/__snapshots__/runner.test.ts.snap

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ TypeError: failure"
4343
exports[`should fail test-extend/circular-dependency.test.ts > test-extend/circular-dependency.test.ts 1`] = `"Error: Circular fixture dependency detected: a <- b <- a"`;
4444
4545
exports[`should fail test-extend/fixture-error.test.ts > test-extend/fixture-error.test.ts 1`] = `
46-
"Error: Test timed out in 20ms.
46+
"Error: Error fixture teardown
47+
Error: Test timed out in 20ms.
4748
Error: Error thrown in test fixture
4849
Error: Error thrown in afterEach fixture
4950
Error: Error thrown in beforeEach fixture"

0 commit comments

Comments
 (0)
Please sign in to comment.