playwright-test
Version:
Run mocha, zora, uvu, tape and benchmark.js scripts inside real browsers with playwright.
110 lines (102 loc) • 2.67 kB
text/typescript
import type { BuildOptions } from 'esbuild'
import type {
BrowserContextOptions,
ChromiumBrowser,
FirefoxBrowser,
WebKitBrowser,
} from 'playwright-core'
export interface RunnerOptions {
input?: string[]
testRunner: TestRunner
cwd: string
extensions: string
browser: 'chromium' | 'firefox' | 'webkit' | 'chromium-headless-shell'
debug: boolean
mode: 'main' | 'worker' | 'node'
incognito: boolean
extension: boolean
assets: string
before?: string
sw?: string
cov: boolean
reportDir: string
buildConfig: BuildOptions
buildSWConfig: BuildOptions
browserContextOptions?: BrowserContextOptions
/**
* Before tests hook
*
* @param env - Runner environment. Use `JSON.parse(env.PW_OPTIONS)` to access runner options.
*/
beforeTests: (env: RunnerEnv) => Promise<unknown>
/**
* After tests hook
*
* @param env - Runner environment. Use `JSON.parse(env.PW_OPTIONS)` to access runner options.
*/
afterTests: (env: RunnerEnv) => Promise<unknown>
}
export interface RunnerEnv extends NodeJS.ProcessEnv {
PW_SERVER: string
PW_OPTIONS: string
NODE_ENV: 'test'
}
export interface CliOptions {
runner: 'mocha' | 'zora' | 'tape' | 'uvu' | 'benchmark' | 'none'
browser: 'chromium' | 'firefox' | 'webkit'
mode: 'main' | 'worker' | 'node'
debug: boolean
incognito: boolean
extension: boolean
cov: boolean
reportDir: string
watch?: boolean
before?: string
sw?: string
assets: string
cwd: string
extensions: string
config?: string
}
export type ConfigFn = (options: CliOptions) => Partial<RunnerOptions>
export type PwResult<TBrowser> = TBrowser extends 'webkit'
? WebKitBrowser
: TBrowser extends 'firefox'
? FirefoxBrowser
: TBrowser extends 'chromium'
? ChromiumBrowser
: never
export interface CompilerOutput {
outName: string
files: Set<string>
}
export interface TestRunner {
/**
* Module ID name used to import the test runner runtime.
* Used in auto detection of the test runner.
*/
moduleId: string
/**
* Options made available to the compiled runtime.
* This is useful to pass options to the test runner.
*
* @example
* ```js
* const options = JSON.parse(process.env.PW_OPTIONS)
* const testRunnerOptions = options.testRunner.options
* ```
*/
options?: unknown
/**
* Esbuild config for the test runner
*/
buildConfig?: (options: RunnerOptions) => BuildOptions
/**
* Compile runtime entry point for esbuild
*
* @param options - Runner options
* @param testPaths - Test paths
* @returns
*/
compileRuntime: (options: RunnerOptions, testPaths: string[]) => string
}