diff --git a/packages/playwright/src/runner/tasks.ts b/packages/playwright/src/runner/tasks.ts index 528cac47cd..aeaceadc8b 100644 --- a/packages/playwright/src/runner/tasks.ts +++ b/packages/playwright/src/runner/tasks.ts @@ -182,10 +182,15 @@ function createGlobalSetupTask(index: number, length: number): Task { globalSetupFinished = true; }, teardown: async ({ config }) => { + let firstError: any; if (typeof globalSetupResult === 'function') - await globalSetupResult(); + try { await globalSetupResult(); } catch (error) { firstError = error; } + if (globalSetupFinished) await teardownHook?.(config.config); + + if (firstError) + throw firstError; }, }; } diff --git a/tests/playwright-test/global-setup.spec.ts b/tests/playwright-test/global-setup.spec.ts index f1bd7b7458..177d29a91d 100644 --- a/tests/playwright-test/global-setup.spec.ts +++ b/tests/playwright-test/global-setup.spec.ts @@ -422,7 +422,7 @@ test('globalSetup should support multiple', async ({ runInlineTest }) => { 'globalSetup3Function', 'globalTeardown2', 'globalSetup1Function', - // 'globalTeardown1' is missing, because globalSetup1Function errored out. + 'globalTeardown1', ]); expect(result.output).toContain('Error: kaboom'); });