@@ -5,6 +5,7 @@ import type {
55 BrowserContextOptions ,
66 Page ,
77} from 'playwright-core'
8+ import { Event } from 'jest-circus'
89import 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
0 commit comments