@@ -5,6 +5,7 @@ import type {
5
5
BrowserContextOptions ,
6
6
Page ,
7
7
} from 'playwright-core'
8
+ import { Event } from 'jest-circus'
8
9
import type {
9
10
BrowserType ,
10
11
ConfigDeviceType ,
@@ -198,6 +199,16 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
198
199
return page
199
200
}
200
201
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
+
201
212
async setup ( ) : Promise < void > {
202
213
const { wsEndpoint, browserName, testEnvironmentOptions } = this . _config
203
214
this . _jestPlaywrightConfig = testEnvironmentOptions [
@@ -256,16 +267,7 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
256
267
? browserOrContext
257
268
: await this . global . browser . newContext ( contextOptions )
258
269
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 )
269
271
}
270
272
this . global . page = await this . _setNewPageInstance ( )
271
273
}
@@ -345,6 +347,28 @@ export const getPlaywrightEnv = (basicEnv = 'node'): unknown => {
345
347
}
346
348
}
347
349
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
+
348
372
async teardown ( ) : Promise < void > {
349
373
const { browser, context, page } = this . global
350
374
const { collectCoverage } = this . _jestPlaywrightConfig
0 commit comments