|
| 1 | +import type { Page } from '@playwright/test' |
1 | 2 | import { test as base } from '@playwright/test' |
| 3 | +import MCR from 'monocart-coverage-reports' |
2 | 4 | import { ConduitPageObject } from 'page-objects/conduit.page-object' |
| 5 | +import coverageOptions from './mcr.config' |
3 | 6 |
|
4 | 7 | export const test = base.extend<{ |
5 | 8 | conduit: ConduitPageObject |
| 9 | + autoTestFixture: string |
6 | 10 | }>({ |
7 | 11 | conduit: async ({ page }, use) => { |
8 | 12 | const buyscoutPageObject = new ConduitPageObject(page) |
9 | 13 | await use(buyscoutPageObject) |
10 | 14 | }, |
| 15 | + |
| 16 | + autoTestFixture: [async ({ context }, use) => { |
| 17 | + const isChromium = test.info().project.name === 'chromium' |
| 18 | + |
| 19 | + // eslint-disable-next-line unicorn/consistent-function-scoping |
| 20 | + const handlePageEvent = async (page: Page) => { |
| 21 | + await Promise.all([ |
| 22 | + page.coverage.startJSCoverage({ |
| 23 | + resetOnNavigation: false, |
| 24 | + }), |
| 25 | + page.coverage.startCSSCoverage({ |
| 26 | + resetOnNavigation: false, |
| 27 | + }), |
| 28 | + ]) |
| 29 | + } |
| 30 | + |
| 31 | + // coverage API is chromium only |
| 32 | + if (isChromium) { |
| 33 | + context.on('page', handlePageEvent) |
| 34 | + } |
| 35 | + |
| 36 | + await use('autoTestFixture') |
| 37 | + |
| 38 | + if (isChromium) { |
| 39 | + context.off('page', handlePageEvent) |
| 40 | + const coverageList = await Promise.all(context.pages().map(async page => { |
| 41 | + const jsCoverage = await page.coverage.stopJSCoverage() |
| 42 | + const cssCoverage = await page.coverage.stopCSSCoverage() |
| 43 | + return [...jsCoverage, ...cssCoverage] |
| 44 | + })) |
| 45 | + // console.log(coverageList.map((item) => item.url)); |
| 46 | + |
| 47 | + const mcr = MCR(coverageOptions) |
| 48 | + await mcr.add(coverageList.flat()) |
| 49 | + } |
| 50 | + }, { |
| 51 | + scope: 'test', |
| 52 | + auto: true, |
| 53 | + }], |
11 | 54 | }) |
12 | 55 |
|
13 | 56 | test.afterEach(async ({ page }, testInfo) => { |
|
0 commit comments