extend tests

This commit is contained in:
Simon Knott 2024-10-07 07:40:58 +02:00
parent 38b7dee442
commit 3ef8178cca
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC
2 changed files with 17 additions and 10 deletions

View file

@ -182,10 +182,10 @@ function createGlobalSetupTask(index: number, length: number): Task<TestRun> {
globalSetupFinished = true; globalSetupFinished = true;
}, },
teardown: async ({ config }) => { teardown: async ({ config }) => {
if (typeof globalSetupResult === 'function')
await globalSetupResult();
if (globalSetupFinished) if (globalSetupFinished)
await teardownHook?.(config.config); await teardownHook?.(config.config);
if (typeof globalSetupResult === 'function')
await globalSetupResult();
}, },
}; };
} }

View file

@ -391,15 +391,16 @@ test('globalSetup should support multiple', async ({ runInlineTest }) => {
const result = await runInlineTest({ const result = await runInlineTest({
'playwright.config.ts': ` 'playwright.config.ts': `
module.exports = { module.exports = {
globalSetup: ['./globalSetup1.ts','./globalSetup2.ts','./globalSetup3.ts'], globalSetup: ['./globalSetup1.ts','./globalSetup2.ts','./globalSetup3.ts','./globalSetup4.ts'],
globalTeardown: ['./globalTeardown1.ts', './globalTeardown2.ts'], globalTeardown: ['./globalTeardown2.ts', './globalTeardown3.ts'],
}; };
`, `,
'globalSetup1.ts': `module.exports = () => console.log('%%globalSetup1');`, 'globalSetup1.ts': `module.exports = () => { console.log('%%globalSetup1'); return () => console.log('%%globalSetup1Function'); };`,
'globalSetup2.ts': `module.exports = () => console.log('%%globalSetup2');`, 'globalSetup2.ts': `module.exports = () => console.log('%%globalSetup2');`,
'globalSetup3.ts': `module.exports = () => console.log('%%globalSetup3');`, 'globalSetup3.ts': `module.exports = () => { console.log('%%globalSetup3'); return () => console.log('%%globalSetup3Function'); }`,
'globalTeardown1.ts': `module.exports = () => console.log('%%globalTeardown1');`, 'globalSetup4.ts': `module.exports = () => console.log('%%globalSetup4');`,
'globalTeardown2.ts': `module.exports = () => console.log('%%globalTeardown2');`, 'globalTeardown2.ts': `module.exports = () => { console.log('%%globalTeardown2'); throw new Error('kaboom'); }`,
'globalTeardown3.ts': `module.exports = () => console.log('%%globalTeardown3');`,
'a.test.js': ` 'a.test.js': `
import { test } from '@playwright/test'; import { test } from '@playwright/test';
@ -407,15 +408,21 @@ test('globalSetup should support multiple', async ({ runInlineTest }) => {
test('b', () => console.log('%%test b')); test('b', () => console.log('%%test b'));
`, `,
}, { reporter: 'line' }); }, { reporter: 'line' });
expect(result.passed).toBe(2); expect(result.passed).toBe(2);
// behaviour: setups in order, teardowns in reverse order.
// setup-returned functions inherit their position, and take precedence over `globalTeardown` scripts.
expect(result.outputLines).toEqual([ expect(result.outputLines).toEqual([
'globalSetup1', 'globalSetup1',
'globalSetup2', 'globalSetup2',
'globalSetup3', 'globalSetup3',
'globalSetup4',
'test a', 'test a',
'test b', 'test b',
'globalSetup3Function',
'globalTeardown3',
'globalTeardown2', 'globalTeardown2',
'globalTeardown1', // 'globalSetup1Function' is missing, because globalTeardown2 errored out.
]); ]);
expect(result.output).toContain('Error: kaboom');
}); });