From d57086b5abb5e7ecfc8445058703af4771ba3975 Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Fri, 2 May 2025 16:35:31 -0400 Subject: [PATCH] fix(testing): ignore test outputs from playwright when linting (#31015) Currently if Playwright runs with trace on, it'll generate `.js` files in `test-output` folder. Trace is turned on automatically whenever a e2e test retries, or if the user sets `trace: 'on'`, or if `--trace on` is passed to the CLI. These trace `.js` files are being linted, and is failing the lint task. ## Current Behavior Lint fails when trace is on ## Expected Behavior Lint should ignore trace files ## Related Issue(s) Fixes # --- .../configuration/configuration.spec.ts | 22 +++++++++++++++++++ .../generators/configuration/configuration.ts | 14 ++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/playwright/src/generators/configuration/configuration.spec.ts b/packages/playwright/src/generators/configuration/configuration.spec.ts index f4e52ac228..ed075b8e3e 100644 --- a/packages/playwright/src/generators/configuration/configuration.spec.ts +++ b/packages/playwright/src/generators/configuration/configuration.spec.ts @@ -110,5 +110,27 @@ describe('Playwright e2e configuration', () => { " `); }); + + it('should ignore Playwright output files in eslint config if used', async () => { + tree.write('eslint.config.mjs', `export default [{ ignores: [] }];`); + writeJson(tree, 'apps/myapp/package.json', { + name: '@proj/myapp', + }); + writeJson(tree, 'apps/myapp/tsconfig.json', { + include: [], + files: [], + references: [], + }); + + await configGenerator(tree, { + project: '@proj/myapp', + linter: 'eslint', + }); + + expect(tree.read('eslint.config.mjs', 'utf-8')).toMatchInlineSnapshot(` + "export default [{ ignores: ['**/test-output'] }]; + " + `); + }); }); }); diff --git a/packages/playwright/src/generators/configuration/configuration.ts b/packages/playwright/src/generators/configuration/configuration.ts index ba70913ff0..43ee1d532f 100644 --- a/packages/playwright/src/generators/configuration/configuration.ts +++ b/packages/playwright/src/generators/configuration/configuration.ts @@ -39,6 +39,7 @@ import type { ConfigurationGeneratorSchema, NormalizedGeneratorOptions, } from './schema'; +import { addIgnoresToLintConfig } from '@nx/eslint/src/generators/utils/eslint-file'; export function configurationGenerator( tree: Tree, @@ -186,7 +187,7 @@ export async function configurationGeneratorInternal( writeJson(tree, packageJsonPath, packageJson); } - ignoreTestOutput(tree); + ignoreTestOutput(tree, options); } const hasPlugin = readNxJson(tree).plugins?.some((p) => @@ -388,7 +389,16 @@ Rename or remove the existing e2e target.`); updateProjectConfiguration(tree, options.project, projectConfig); } -function ignoreTestOutput(tree: Tree): void { +function ignoreTestOutput( + tree: Tree, + options: ConfigurationGeneratorSchema +): void { + // Make sure playwright outputs are not linted. + if (options.linter === 'eslint') { + addIgnoresToLintConfig(tree, '', ['**/test-output']); + } + + // Handle gitignore if (!tree.exists('.gitignore')) { logger.warn(`Couldn't find a root .gitignore file to update.`); }