cherry-pick(#21318): chore: have pretty error if CT config has no defineConfig (#21321)

This commit is contained in:
Playwright Service 2023-03-01 16:42:42 -08:00 committed by GitHub
parent 128b2ff1d5
commit d7ad0a0180
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 3 deletions

View file

@ -15,8 +15,8 @@
*/
const pwt = require('./lib/index');
const { defineConfig } = require('./lib/common/configLoader');
const playwright = require('playwright-core');
const defineConfig = config => config;
const combinedExports = {
...playwright,
...pwt,

View file

@ -25,6 +25,12 @@ import { errorWithFile, getPackageJsonPath, mergeObjects } from '../util';
export const defaultTimeout = 30000;
const kDefineConfigWasUsed = Symbol('defineConfigWasUsed');
export const defineConfig = (config: any) => {
config[kDefineConfigWasUsed] = true;
return config;
};
export class ConfigLoader {
private _fullConfig: FullConfigInternal;
@ -122,6 +128,7 @@ export class ConfigLoader {
this._fullConfig._internal.ignoreSnapshots = takeFirst(config.ignoreSnapshots, baseFullConfig._internal.ignoreSnapshots);
this._fullConfig.updateSnapshots = takeFirst(config.updateSnapshots, baseFullConfig.updateSnapshots);
this._fullConfig._internal.plugins = ((config as any)._plugins || []).map((p: any) => ({ factory: p }));
this._fullConfig._internal.defineConfigWasUsed = !!(config as any)[kDefineConfigWasUsed];
const workers = takeFirst(config.workers, '50%');
if (typeof workers === 'string') {
@ -454,6 +461,7 @@ export const baseFullConfig: FullConfigInternal = {
cliGrep: undefined,
cliGrepInvert: undefined,
listOnly: false,
defineConfigWasUsed: false,
}
};

View file

@ -45,6 +45,7 @@ type ConfigInternal = {
cliProjectFilter?: string[];
testIdMatcher?: Matcher;
passWithNoTests?: boolean;
defineConfigWasUsed: boolean;
};
/**

View file

@ -14,7 +14,7 @@
* limitations under the License.
*/
import type { Fixtures, Locator, Page, BrowserContextOptions, PlaywrightTestArgs, PlaywrightTestOptions, PlaywrightWorkerArgs, PlaywrightWorkerOptions, BrowserContext, ContextReuseMode } from './common/types';
import type { Fixtures, Locator, Page, BrowserContextOptions, PlaywrightTestArgs, PlaywrightTestOptions, PlaywrightWorkerArgs, PlaywrightWorkerOptions, BrowserContext, ContextReuseMode, FullConfigInternal } from './common/types';
import type { Component, JsxComponent, MountOptions } from '../types/component';
let boundCallbacksForMount: Function[] = [];
@ -37,7 +37,9 @@ export const fixtures: Fixtures<
_ctWorker: [{ context: undefined, hash: '' }, { scope: 'worker' }],
page: async ({ page }, use) => {
page: async ({ page }, use, info) => {
if (!(info.config as FullConfigInternal)._internal.defineConfigWasUsed)
throw new Error('Component testing requires the use of the defineConfig() in your playwright-ct.config.{ts,js}: https://aka.ms/playwright/ct-define-config');
await (page as any)._wrapApiCall(async () => {
await page.exposeFunction('__ct_dispatch', (ordinal: number, args: any[]) => {
boundCallbacksForMount[ordinal](...args);