Skip to content

Commit c6f5f7f

Browse files
authored
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

Lines changed: 11 additions & 1 deletion
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

Lines changed: 13 additions & 0 deletions
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

Lines changed: 2 additions & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy