From 7c7a86246afc733caee86e16627f482dfc68abcf Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Thu, 10 Jun 2021 19:43:55 -0700 Subject: [PATCH] fix(test-runner): resolve global hooks relative to the config dir --- src/test/loader.ts | 8 +++++++- tests/playwright-test/global-setup.spec.ts | 18 +++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/test/loader.ts b/src/test/loader.ts index 04bb202934e51..919d418179d91 100644 --- a/src/test/loader.ts +++ b/src/test/loader.ts @@ -57,9 +57,9 @@ export class Loader { if (config && typeof config === 'object' && ('default' in config)) config = config['default']; this._config = config; + this._configFile = file; const rawConfig = { ...config }; this._processConfigObject(path.dirname(file)); - this._configFile = file; return rawConfig; } catch (e) { prependErrorMessage(e, `Error while reading ${file}:\n`); @@ -77,6 +77,12 @@ export class Loader { private _processConfigObject(rootDir: string) { validateConfig(this._config); + // Resolve script hooks relative to the root dir. + if (this._config.globalSetup) + this._config.globalSetup = path.resolve(rootDir, this._config.globalSetup); + if (this._config.globalTeardown) + this._config.globalTeardown = path.resolve(rootDir, this._config.globalTeardown); + const configUse = mergeObjects(this._defaultConfig.use, this._config.use); this._config = mergeObjects(mergeObjects(this._defaultConfig, this._config), { use: configUse }); diff --git a/tests/playwright-test/global-setup.spec.ts b/tests/playwright-test/global-setup.spec.ts index 56dd744ed5fdf..b8621e2a9a5e4 100644 --- a/tests/playwright-test/global-setup.spec.ts +++ b/tests/playwright-test/global-setup.spec.ts @@ -21,7 +21,7 @@ test('globalSetup and globalTeardown should work', async ({ runInlineTest }) => 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), + globalSetup: 'globalSetup.ts', globalTeardown: path.join(__dirname, 'globalTeardown.ts'), }; `, @@ -53,8 +53,8 @@ test('globalTeardown runs after failures', async ({ runInlineTest }) => { 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), - globalTeardown: path.join(__dirname, 'globalTeardown.ts'), + globalSetup: 'globalSetup.ts', + globalTeardown: 'globalTeardown.ts', }; `, 'globalSetup.ts': ` @@ -85,8 +85,8 @@ test('globalTeardown does not run when globalSetup times out', async ({ runInlin 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), - globalTeardown: path.join(__dirname, 'globalTeardown.ts'), + globalSetup: 'globalSetup.ts', + globalTeardown: 'globalTeardown.ts', globalTimeout: 1000, }; `, @@ -119,7 +119,7 @@ test('globalSetup should be run before requiring tests', async ({ runInlineTest 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), + globalSetup: 'globalSetup.ts', }; `, 'globalSetup.ts': ` @@ -143,7 +143,7 @@ test('globalSetup should work with sync function', async ({ runInlineTest }) => 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), + globalSetup: 'globalSetup.ts', }; `, 'globalSetup.ts': ` @@ -167,7 +167,7 @@ test('globalSetup should throw when passed non-function', async ({ runInlineTest 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), + globalSetup: 'globalSetup.ts', }; `, 'globalSetup.ts': ` @@ -187,7 +187,7 @@ test('globalSetup should work with default export and run the returned fn', asyn 'playwright.config.ts': ` import * as path from 'path'; module.exports = { - globalSetup: path.join(__dirname, 'globalSetup.ts'), + globalSetup: 'globalSetup.ts', }; `, 'globalSetup.ts': `