Skip to content

Commit f04430f

Browse files
authored
Skip tests (#699)
* Skip tests * Refactoring * Remove unused type
1 parent 909ec77 commit f04430f

File tree

4 files changed

+45
-11
lines changed

4 files changed

+45
-11
lines changed

src/PlaywrightEnvironment.ts

+34-10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {
55
BrowserContextOptions,
66
Page,
77
} from 'playwright-core'
8+
import { Event } from 'jest-circus'
89
import type {
910
BrowserType,
1011
ConfigDeviceType,
@@ -198,6 +199,16 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
198199
return page
199200
}
200201

202+
async _setCollectCoverage(context: BrowserContext) {
203+
await context.exposeFunction('reportCodeCoverage', saveCoverageToFile)
204+
await context.addInitScript(() =>
205+
window.addEventListener('beforeunload', () => {
206+
// @ts-ignore
207+
reportCodeCoverage(window.__coverage__)
208+
}),
209+
)
210+
}
211+
201212
async setup(): Promise<void> {
202213
const { wsEndpoint, browserName, testEnvironmentOptions } = this._config
203214
this._jestPlaywrightConfig = testEnvironmentOptions[
@@ -256,16 +267,7 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
256267
? browserOrContext
257268
: await this.global.browser.newContext(contextOptions)
258269
if (collectCoverage) {
259-
await (this.global.context as BrowserContext).exposeFunction(
260-
'reportCodeCoverage',
261-
saveCoverageToFile,
262-
)
263-
await (this.global.context as BrowserContext).addInitScript(() =>
264-
window.addEventListener('beforeunload', () => {
265-
// @ts-ignore
266-
reportCodeCoverage(window.__coverage__)
267-
}),
268-
)
270+
await this._setCollectCoverage(this.global.context as BrowserContext)
269271
}
270272
this.global.page = await this._setNewPageInstance()
271273
}
@@ -345,6 +347,28 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
345347
}
346348
}
347349

350+
async handleTestEvent(event: Event) {
351+
const { browserName } = this._config
352+
const { collectCoverage, haveSkippedTests } = this._jestPlaywrightConfig
353+
const browserType = getBrowserType(browserName)
354+
const { instance, devices } = getPlaywrightInstance(browserType)
355+
const contextOptions = this._getContextOptions(devices)
356+
if (haveSkippedTests && event.name === 'test_fn_start') {
357+
this.global.browser = await getBrowserPerProcess(
358+
instance as GenericBrowser,
359+
browserType,
360+
this._jestPlaywrightConfig,
361+
)
362+
this.global.context = await this.global.browser.newContext(
363+
contextOptions,
364+
)
365+
if (collectCoverage) {
366+
await this._setCollectCoverage(this.global.context)
367+
}
368+
this.global.page = await this._setNewPageInstance()
369+
}
370+
}
371+
348372
async teardown(): Promise<void> {
349373
const { browser, context, page } = this.global
350374
const { collectCoverage } = this._jestPlaywrightConfig

src/PlaywrightRunner.ts

+8
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
DEFAULT_TEST_PLAYWRIGHT_TIMEOUT,
3838
CONFIG_ENVIRONMENT_NAME,
3939
SERVER,
40+
LAUNCH,
4041
} from './constants'
4142
import { setupCoverage, mergeCoverage } from './coverage'
4243
import { GenericBrowser } from '../types/global'
@@ -105,6 +106,7 @@ const getJestTimeout = (configTimeout?: number) => {
105106

106107
class PlaywrightRunner extends JestRunner {
107108
browser2Server: Partial<Record<string, BrowserServer>>
109+
config: JestConfig.GlobalConfig
108110
constructor(
109111
globalConfig: JestConfig.GlobalConfig,
110112
context: TestRunnerContext,
@@ -114,6 +116,7 @@ class PlaywrightRunner extends JestRunner {
114116
config.testTimeout = getJestTimeout(config.testTimeout)
115117
super(config, context)
116118
this.browser2Server = {}
119+
this.config = config
117120
}
118121

119122
async launchServer(
@@ -202,6 +205,11 @@ class PlaywrightRunner extends JestRunner {
202205
rootDir,
203206
testEnvironmentOptions[CONFIG_ENVIRONMENT_NAME] as JestPlaywrightConfig,
204207
)
208+
if (this.config.testNamePattern) {
209+
config.launchType = LAUNCH
210+
config.skipInitialization = true
211+
config.haveSkippedTests = true
212+
}
205213
const browserTests = await this.getTests(tests, config)
206214
if (config.collectCoverage) {
207215
await setupCoverage()

src/coverage.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const fsAsync = fs.promises
88

99
// @ts-ignore
1010
import NYC from 'nyc'
11+
import { PACKAGE_NAME } from './constants'
1112

1213
const NYC_DIR = '.nyc_output'
1314
const COV_MERGE_DIR = path.join(NYC_DIR, 'merge')
@@ -37,7 +38,7 @@ export const saveCoverageOnPage = async (
3738
): Promise<void> => {
3839
if (!collectCoverage) {
3940
console.warn(
40-
'jest-playwright: saveCoverage was called but collectCoverage is not true in jest-playwright.js',
41+
`${PACKAGE_NAME}: saveCoverage was called but collectCoverage is not true in config file`,
4142
)
4243
return
4344
}

types/global.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ export type ServerOptions = JestProcessManagerOptions & {
199199
}
200200

201201
export interface JestPlaywrightConfig {
202+
haveSkippedTests?: boolean
202203
skipInitialization?: boolean
203204
debugOptions?: JestPlaywrightConfig
204205
launchType?: LaunchType

0 commit comments

Comments
 (0)