fix(e2e): specify .nyc_output path as custom config setting (#7658)

* fix: specify .nyc_output path as custom config setting

* fix: coverage for mobile suite

* fix: pathing in playwright configs
This commit is contained in:
Jesse Mazzella 2024-04-01 11:29:47 -07:00 committed by GitHub
parent f98eb31956
commit 311ad0b87a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 32 additions and 27 deletions

View File

@ -16,7 +16,6 @@ config.module.rules.push({
loader: 'babel-loader', loader: 'babel-loader',
options: { options: {
retainLines: true, retainLines: true,
// eslint-disable-next-line no-undef
plugins: [ plugins: [
[ [
'babel-plugin-istanbul', 'babel-plugin-istanbul',

View File

@ -60,14 +60,16 @@ function waitForAnimations(locator) {
); );
} }
/** const istanbulCLIOutput = fileURLToPath(new URL('.nyc_output', import.meta.url));
* This is part of our codecoverage shim.
* @see {@link https://github.com/mxschmitt/playwright-test-coverage Github Example Project}
* @constant {string}
*/
const istanbulCLIOutput = path.join(process.cwd(), '.nyc_output');
const extendedTest = test.extend({ const extendedTest = test.extend({
/**
* Path to output raw coverage files. Can be overridden in Playwright config file.
* @see {@link https://github.com/mxschmitt/playwright-test-coverage Github Example Project}
* @constant {string}
*/
coveragePath: [istanbulCLIOutput, { option: true }],
/** /**
* This allows the test to manipulate the browser clock. This is useful for Visual and Snapshot tests which need * This allows the test to manipulate the browser clock. This is useful for Visual and Snapshot tests which need
* the Time Indicator Clock to be in a specific state. * the Time Indicator Clock to be in a specific state.
@ -148,17 +150,17 @@ const extendedTest = test.extend({
* Extends the base context class to add codecoverage shim. * Extends the base context class to add codecoverage shim.
* @see {@link https://github.com/mxschmitt/playwright-test-coverage Github Project} * @see {@link https://github.com/mxschmitt/playwright-test-coverage Github Project}
*/ */
context: async ({ context }, use) => { context: async ({ context, coveragePath }, use) => {
await context.addInitScript(() => await context.addInitScript(() =>
window.addEventListener('beforeunload', () => window.addEventListener('beforeunload', () =>
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__)) window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))
) )
); );
await fs.promises.mkdir(istanbulCLIOutput, { recursive: true }); await fs.promises.mkdir(coveragePath, { recursive: true });
await context.exposeFunction('collectIstanbulCoverage', (coverageJSON) => { await context.exposeFunction('collectIstanbulCoverage', (coverageJSON) => {
if (coverageJSON) { if (coverageJSON) {
fs.writeFileSync( fs.writeFileSync(
path.join(istanbulCLIOutput, `playwright_coverage_${uuid()}.json`), path.join(coveragePath, `playwright_coverage_${uuid()}.json`),
coverageJSON coverageJSON
); );
} }
@ -166,9 +168,9 @@ const extendedTest = test.extend({
await use(context); await use(context);
for (const page of context.pages()) { for (const page of context.pages()) {
await page.evaluate(() => await page.evaluate(() => {
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__)) window.collectIstanbulCoverage(JSON.stringify(window.__coverage__));
); });
} }
}, },
/** /**

View File

@ -3,6 +3,7 @@
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
import { devices } from '@playwright/test'; import { devices } from '@playwright/test';
import { fileURLToPath } from 'url';
const MAX_FAILURES = 5; const MAX_FAILURES = 5;
const NUM_WORKERS = 2; const NUM_WORKERS = 2;
@ -15,7 +16,7 @@ const config = {
timeout: 60 * 1000, timeout: 60 * 1000,
webServer: { webServer: {
command: 'npm run start:coverage', command: 'npm run start:coverage',
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging. reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
@ -28,7 +29,9 @@ const config = {
ignoreHTTPSErrors: true, ignoreHTTPSErrors: true,
screenshot: 'only-on-failure', screenshot: 'only-on-failure',
trace: 'on-first-retry', trace: 'on-first-retry',
video: 'off' video: 'off',
// @ts-ignore - custom configuration option for nyc codecoverage output path
coveragePath: fileURLToPath(new URL('../.nyc_output', import.meta.url))
}, },
projects: [ projects: [
{ {

View File

@ -1,6 +1,6 @@
// playwright.config.js // playwright.config.js
// @ts-check // @ts-check
import { fileURLToPath } from 'url';
/** @type {import('@playwright/test').PlaywrightTestConfig} */ /** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = { const config = {
retries: 0, retries: 0,
@ -10,7 +10,7 @@ const config = {
timeout: 30 * 1000, timeout: 30 * 1000,
webServer: { webServer: {
command: 'npm run start:coverage', command: 'npm run start:coverage',
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 120 * 1000, timeout: 120 * 1000,
reuseExistingServer: true reuseExistingServer: true

View File

@ -14,7 +14,7 @@ const config = {
timeout: 30 * 1000, timeout: 30 * 1000,
webServer: { webServer: {
command: 'npm run start:coverage', command: 'npm run start:coverage',
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging. reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
@ -28,7 +28,9 @@ const config = {
ignoreHTTPSErrors: true, ignoreHTTPSErrors: true,
screenshot: 'only-on-failure', screenshot: 'only-on-failure',
trace: 'on-first-retry', trace: 'on-first-retry',
video: 'off' video: 'off',
// @ts-ignore - custom configuration option for nyc codecoverage output path
coveragePath: fileURLToPath(new URL('../.nyc_output', import.meta.url))
}, },
projects: [ projects: [
{ {

View File

@ -1,6 +1,6 @@
// playwright.config.js // playwright.config.js
// @ts-check // @ts-check
import { fileURLToPath } from 'url';
/** @type {import('@playwright/test').PlaywrightTestConfig} */ /** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = { const config = {
retries: 1, //Only for debugging purposes for trace: 'on-first-retry' retries: 1, //Only for debugging purposes for trace: 'on-first-retry'
@ -10,7 +10,7 @@ const config = {
workers: 1, //Only run in serial with 1 worker workers: 1, //Only run in serial with 1 worker
webServer: { webServer: {
command: 'npm run start', //need development mode for performance.marks and others command: 'npm run start', //need development mode for performance.marks and others
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: false reuseExistingServer: false

View File

@ -1,6 +1,6 @@
// playwright.config.js // playwright.config.js
// @ts-check // @ts-check
import { fileURLToPath } from 'url';
/** @type {import('@playwright/test').PlaywrightTestConfig} */ /** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = { const config = {
retries: 0, //Only for debugging purposes for trace: 'on-first-retry' retries: 0, //Only for debugging purposes for trace: 'on-first-retry'
@ -10,7 +10,7 @@ const config = {
workers: 1, //Only run in serial with 1 worker workers: 1, //Only run in serial with 1 worker
webServer: { webServer: {
command: 'npm run start:prod', //Production mode command: 'npm run start:prod', //Production mode
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: false //Must be run with this option to prevent dev mode reuseExistingServer: false //Must be run with this option to prevent dev mode

View File

@ -1,6 +1,6 @@
// playwright.config.js // playwright.config.js
// @ts-check // @ts-check
import { fileURLToPath } from 'url';
/** @type {import('@playwright/test').PlaywrightTestConfig<{ theme: string }>} */ /** @type {import('@playwright/test').PlaywrightTestConfig<{ theme: string }>} */
const config = { const config = {
retries: 0, // Visual tests should never retry due to snapshot comparison errors. Leaving as a shim retries: 0, // Visual tests should never retry due to snapshot comparison errors. Leaving as a shim
@ -10,7 +10,7 @@ const config = {
workers: 1, //Lower stress on Circle CI Agent for Visual tests https://github.com/percy/cli/discussions/1067 workers: 1, //Lower stress on Circle CI Agent for Visual tests https://github.com/percy/cli/discussions/1067
webServer: { webServer: {
command: 'npm run start:coverage', command: 'npm run start:coverage',
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: !process.env.CI reuseExistingServer: !process.env.CI

View File

@ -1,6 +1,5 @@
// playwright.config.js // playwright.config.js
// @ts-check // @ts-check
import { devices } from '@playwright/test'; import { devices } from '@playwright/test';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
@ -11,7 +10,7 @@ const config = {
timeout: 60 * 1000, timeout: 60 * 1000,
webServer: { webServer: {
command: 'npm run start', //Start in dev mode for hot reloading command: 'npm run start', //Start in dev mode for hot reloading
cwd: '../', // Provide cwd for the root of the project cwd: fileURLToPath(new URL('../', import.meta.url)), // Provide cwd for the root of the project
url: 'http://localhost:8080/#', url: 'http://localhost:8080/#',
timeout: 200 * 1000, timeout: 200 * 1000,
reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging. reuseExistingServer: true //This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.