feat(plugins): expose suite to plugin setup (#13807)
This commit is contained in:
parent
b9f47558b5
commit
e756528ad2
|
|
@ -10,5 +10,7 @@
|
||||||
|
|
||||||
## optional async method: TestPlugin.setup
|
## optional async method: TestPlugin.setup
|
||||||
|
|
||||||
## optional async method: TestPlugin.teardown
|
### param: TestPlugin.setup.suite
|
||||||
|
- `suite` <[Suite]>
|
||||||
|
|
||||||
|
## optional async method: TestPlugin.teardown
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,6 @@ export const debug = debugLibrary;
|
||||||
|
|
||||||
export { getProxyForUrl } from 'proxy-from-env';
|
export { getProxyForUrl } from 'proxy-from-env';
|
||||||
|
|
||||||
import globLibrary from 'glob';
|
|
||||||
export const glob = globLibrary;
|
|
||||||
|
|
||||||
export { HttpsProxyAgent } from 'https-proxy-agent';
|
export { HttpsProxyAgent } from 'https-proxy-agent';
|
||||||
|
|
||||||
import jpegLibrary from 'jpeg-js';
|
import jpegLibrary from 'jpeg-js';
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
export const colors: typeof import('../bundles/utils/node_modules/colors/safe') = require('./utilsBundleImpl').colors;
|
export const colors: typeof import('../bundles/utils/node_modules/colors/safe') = require('./utilsBundleImpl').colors;
|
||||||
export const debug: typeof import('../bundles/utils/node_modules/@types/debug') = require('./utilsBundleImpl').debug;
|
export const debug: typeof import('../bundles/utils/node_modules/@types/debug') = require('./utilsBundleImpl').debug;
|
||||||
export const getProxyForUrl: typeof import('../bundles/utils/node_modules/@types/proxy-from-env').getProxyForUrl = require('./utilsBundleImpl').getProxyForUrl;
|
export const getProxyForUrl: typeof import('../bundles/utils/node_modules/@types/proxy-from-env').getProxyForUrl = require('./utilsBundleImpl').getProxyForUrl;
|
||||||
export const glob: typeof import('../bundles/utils/node_modules/@types/glob') = require('./utilsBundleImpl').glob;
|
|
||||||
export const HttpsProxyAgent: typeof import('../bundles/utils/node_modules/https-proxy-agent').HttpsProxyAgent = require('./utilsBundleImpl').HttpsProxyAgent;
|
export const HttpsProxyAgent: typeof import('../bundles/utils/node_modules/https-proxy-agent').HttpsProxyAgent = require('./utilsBundleImpl').HttpsProxyAgent;
|
||||||
export const jpegjs: typeof import('../bundles/utils/node_modules/jpeg-js') = require('./utilsBundleImpl').jpegjs;
|
export const jpegjs: typeof import('../bundles/utils/node_modules/jpeg-js') = require('./utilsBundleImpl').jpegjs;
|
||||||
export const lockfile: typeof import('../bundles/utils/node_modules/@types/proper-lockfile') = require('./utilsBundleImpl').lockfile;
|
export const lockfile: typeof import('../bundles/utils/node_modules/@types/proper-lockfile') = require('./utilsBundleImpl').lockfile;
|
||||||
|
|
|
||||||
1
packages/playwright-ct-react/vitePlugin.d.ts
vendored
1
packages/playwright-ct-react/vitePlugin.d.ts
vendored
|
|
@ -19,6 +19,5 @@ import type { InlineConfig } from 'vite';
|
||||||
|
|
||||||
export default function(options?: {
|
export default function(options?: {
|
||||||
config?: InlineConfig,
|
config?: InlineConfig,
|
||||||
include?: string
|
|
||||||
port?: number,
|
port?: number,
|
||||||
}): TestPlugin;
|
}): TestPlugin;
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,5 @@ import type { InlineConfig } from 'vite';
|
||||||
|
|
||||||
export default function(options?: {
|
export default function(options?: {
|
||||||
config?: InlineConfig,
|
config?: InlineConfig,
|
||||||
include?: string
|
|
||||||
port?: number,
|
port?: number,
|
||||||
}): TestPlugin;
|
}): TestPlugin;
|
||||||
|
|
|
||||||
1
packages/playwright-ct-vue/vitePlugin.d.ts
vendored
1
packages/playwright-ct-vue/vitePlugin.d.ts
vendored
|
|
@ -19,6 +19,5 @@ import type { InlineConfig } from 'vite';
|
||||||
|
|
||||||
export default function(options?: {
|
export default function(options?: {
|
||||||
config?: InlineConfig,
|
config?: InlineConfig,
|
||||||
include?: string,
|
|
||||||
port?: number,
|
port?: number,
|
||||||
}): TestPlugin;
|
}): TestPlugin;
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
import type { PlaywrightTestConfig, TestPlugin } from '@playwright/test';
|
import type { PlaywrightTestConfig, TestPlugin } from '@playwright/test';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { glob } from 'playwright-core/lib/utilsBundle';
|
|
||||||
import type { InlineConfig, Plugin, ViteDevServer } from 'vite';
|
import type { InlineConfig, Plugin, ViteDevServer } from 'vite';
|
||||||
import { parse, traverse, types as t } from '../babelBundle';
|
import { parse, traverse, types as t } from '../babelBundle';
|
||||||
import type { ComponentInfo } from '../tsxTransform';
|
import type { ComponentInfo } from '../tsxTransform';
|
||||||
|
|
@ -29,7 +28,6 @@ export function createPlugin(
|
||||||
registerFunction: string,
|
registerFunction: string,
|
||||||
frameworkPluginFactory: () => Plugin,
|
frameworkPluginFactory: () => Plugin,
|
||||||
options: {
|
options: {
|
||||||
include?: string,
|
|
||||||
port?: number,
|
port?: number,
|
||||||
config?: InlineConfig
|
config?: InlineConfig
|
||||||
} = {}): TestPlugin {
|
} = {}): TestPlugin {
|
||||||
|
|
@ -45,12 +43,17 @@ export function createPlugin(
|
||||||
config.use!.baseURL = url;
|
config.use!.baseURL = url;
|
||||||
},
|
},
|
||||||
|
|
||||||
setup: async () => {
|
setup: async suite => {
|
||||||
viteConfig.root = viteConfig.root || configDir;
|
viteConfig.root = viteConfig.root || configDir;
|
||||||
viteConfig.plugins = viteConfig.plugins || [
|
viteConfig.plugins = viteConfig.plugins || [
|
||||||
frameworkPluginFactory()
|
frameworkPluginFactory()
|
||||||
];
|
];
|
||||||
viteConfig.plugins.push(vitePlugin(registerFunction, options.include));
|
const files = new Set<string>();
|
||||||
|
for (const project of suite.suites) {
|
||||||
|
for (const file of project.suites)
|
||||||
|
files.add(file.location!.file);
|
||||||
|
}
|
||||||
|
viteConfig.plugins.push(vitePlugin(registerFunction, [...files]));
|
||||||
viteConfig.configFile = viteConfig.configFile || false;
|
viteConfig.configFile = viteConfig.configFile || false;
|
||||||
viteConfig.server = viteConfig.server || {};
|
viteConfig.server = viteConfig.server || {};
|
||||||
viteConfig.server.port = port;
|
viteConfig.server.port = port;
|
||||||
|
|
@ -67,19 +70,11 @@ export function createPlugin(
|
||||||
|
|
||||||
const imports: Map<string, ComponentInfo> = new Map();
|
const imports: Map<string, ComponentInfo> = new Map();
|
||||||
|
|
||||||
function vitePlugin(registerFunction: string, include: string | undefined): Plugin {
|
function vitePlugin(registerFunction: string, files: string[]): Plugin {
|
||||||
return {
|
return {
|
||||||
name: 'playwright:component-index',
|
name: 'playwright:component-index',
|
||||||
|
|
||||||
configResolved: async config => {
|
configResolved: async config => {
|
||||||
const files = await new Promise<string[]>((f, r) => {
|
|
||||||
glob(include || config.root + '/**/*.{test,spec}.[tj]s{x,}', {}, function(err, files) {
|
|
||||||
if (err)
|
|
||||||
r(err);
|
|
||||||
else
|
|
||||||
f(files);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const text = await fs.promises.readFile(file, 'utf-8');
|
const text = await fs.promises.readFile(file, 'utf-8');
|
||||||
|
|
|
||||||
|
|
@ -371,7 +371,7 @@ export class Runner {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 13. Run Global setup.
|
// 13. Run Global setup.
|
||||||
const globalTearDown = await this._performGlobalSetup(config);
|
const globalTearDown = await this._performGlobalSetup(config, rootSuite);
|
||||||
if (!globalTearDown)
|
if (!globalTearDown)
|
||||||
return { status: 'failed' };
|
return { status: 'failed' };
|
||||||
|
|
||||||
|
|
@ -410,7 +410,7 @@ export class Runner {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _performGlobalSetup(config: FullConfigInternal): Promise<(() => Promise<void>) | undefined> {
|
private async _performGlobalSetup(config: FullConfigInternal, rootSuite: Suite): Promise<(() => Promise<void>) | undefined> {
|
||||||
const result: FullResult = { status: 'passed' };
|
const result: FullResult = { status: 'passed' };
|
||||||
const pluginTeardowns: (() => Promise<void>)[] = [];
|
const pluginTeardowns: (() => Promise<void>)[] = [];
|
||||||
let globalSetupResult: any;
|
let globalSetupResult: any;
|
||||||
|
|
@ -443,7 +443,7 @@ export class Runner {
|
||||||
// First run the plugins, if plugin is a web server we want it to run before the
|
// First run the plugins, if plugin is a web server we want it to run before the
|
||||||
// config's global setup.
|
// config's global setup.
|
||||||
for (const plugin of config._plugins) {
|
for (const plugin of config._plugins) {
|
||||||
await plugin.setup?.();
|
await plugin.setup?.(rootSuite);
|
||||||
if (plugin.teardown)
|
if (plugin.teardown)
|
||||||
pluginTeardowns.unshift(plugin.teardown);
|
pluginTeardowns.unshift(plugin.teardown);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
packages/playwright-test/types/test.d.ts
vendored
6
packages/playwright-test/types/test.d.ts
vendored
|
|
@ -2842,6 +2842,7 @@ export type PlaywrightTestProject<TestArgs = {}, WorkerArgs = {}> = Project<Play
|
||||||
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
||||||
|
|
||||||
import type * as expectType from '@playwright/test/types/expect-types';
|
import type * as expectType from '@playwright/test/types/expect-types';
|
||||||
|
import type { Suite } from '@playwright/test/types/testReporter';
|
||||||
|
|
||||||
type AsymmetricMatcher = Record<string, any>;
|
type AsymmetricMatcher = Record<string, any>;
|
||||||
|
|
||||||
|
|
@ -3643,7 +3644,10 @@ export interface TestPlugin {
|
||||||
*/
|
*/
|
||||||
configure?(config: TestConfig, configDir: string): Promise<void>;
|
configure?(config: TestConfig, configDir: string): Promise<void>;
|
||||||
|
|
||||||
setup?(): Promise<void>;
|
/**
|
||||||
|
* @param suite
|
||||||
|
*/
|
||||||
|
setup?(suite: Suite): Promise<void>;
|
||||||
|
|
||||||
teardown?(): Promise<void>;
|
teardown?(): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
tests/config/experimental.d.ts
vendored
6
tests/config/experimental.d.ts
vendored
|
|
@ -19109,6 +19109,7 @@ export type PlaywrightTestProject<TestArgs = {}, WorkerArgs = {}> = Project<Play
|
||||||
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
||||||
|
|
||||||
import type * as expectType from '@playwright/test/types/expect-types';
|
import type * as expectType from '@playwright/test/types/expect-types';
|
||||||
|
import type { Suite } from '@playwright/test/types/testReporter';
|
||||||
|
|
||||||
type AsymmetricMatcher = Record<string, any>;
|
type AsymmetricMatcher = Record<string, any>;
|
||||||
|
|
||||||
|
|
@ -20096,7 +20097,10 @@ export interface TestPlugin {
|
||||||
*/
|
*/
|
||||||
configure?(config: TestConfig, configDir: string): Promise<void>;
|
configure?(config: TestConfig, configDir: string): Promise<void>;
|
||||||
|
|
||||||
setup?(): Promise<void>;
|
/**
|
||||||
|
* @param suite
|
||||||
|
*/
|
||||||
|
setup?(suite: Suite): Promise<void>;
|
||||||
|
|
||||||
teardown?(): Promise<void>;
|
teardown?(): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
utils/generate_types/overrides-test.d.ts
vendored
1
utils/generate_types/overrides-test.d.ts
vendored
|
|
@ -246,6 +246,7 @@ export type PlaywrightTestProject<TestArgs = {}, WorkerArgs = {}> = Project<Play
|
||||||
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
export type PlaywrightTestConfig<TestArgs = {}, WorkerArgs = {}> = Config<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
|
||||||
|
|
||||||
import type * as expectType from '@playwright/test/types/expect-types';
|
import type * as expectType from '@playwright/test/types/expect-types';
|
||||||
|
import type { Suite } from '@playwright/test/types/testReporter';
|
||||||
|
|
||||||
type AsymmetricMatcher = Record<string, any>;
|
type AsymmetricMatcher = Record<string, any>;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue