From 8f0ec5cb39bae07afd24f5275d2c7c794ce639fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Jona=C5=A1?= Date: Tue, 4 Jul 2023 16:20:54 +0200 Subject: [PATCH] feat(testing): add test-setup.ts to ignored prod inputs (#17918) --- packages/jest/migrations.json | 6 +++ .../jest/src/generators/init/init.spec.ts | 1 + packages/jest/src/generators/init/init.ts | 4 +- .../add-test-setup-to-inputs-ignore.spec.ts | 51 +++++++++++++++++++ .../add-test-setup-to-inputs-ignore.ts | 28 ++++++++++ 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts create mode 100644 packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts diff --git a/packages/jest/migrations.json b/packages/jest/migrations.json index 840757aad8..7189072a8a 100644 --- a/packages/jest/migrations.json +++ b/packages/jest/migrations.json @@ -95,6 +95,12 @@ "version": "16.0.0-beta.1", "description": "Replace @nrwl/jest with @nx/jest", "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" + }, + "add-test-setup-to-inputs-ignore": { + "cli": "nx", + "version": "16.5.0-beta.2", + "description": "Add test-setup.ts to ignored files in production input", + "implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore" } }, "packageJsonUpdates": { diff --git a/packages/jest/src/generators/init/init.spec.ts b/packages/jest/src/generators/init/init.spec.ts index 21babc19e0..1fbeee7e9a 100644 --- a/packages/jest/src/generators/init/init.spec.ts +++ b/packages/jest/src/generators/init/init.spec.ts @@ -86,6 +86,7 @@ export default { ); expect(productionFileSet).toContain('!{projectRoot}/tsconfig.spec.json'); expect(productionFileSet).toContain('!{projectRoot}/jest.config.[jt]s'); + expect(productionFileSet).toContain('!{projectRoot}/src/test-setup.[jt]s'); expect(testDefaults).toEqual({ inputs: ['default', '^production', '{workspaceRoot}/jest.preset.js'], }); diff --git a/packages/jest/src/generators/init/init.ts b/packages/jest/src/generators/init/init.ts index 1eec67e817..134171892f 100644 --- a/packages/jest/src/generators/init/init.ts +++ b/packages/jest/src/generators/init/init.ts @@ -124,7 +124,9 @@ function addTestInputs(tree: Tree) { // Remove tsconfig.spec.json '!{projectRoot}/tsconfig.spec.json', // Remove jest.config.js/ts - '!{projectRoot}/jest.config.[jt]s' + '!{projectRoot}/jest.config.[jt]s', + // Remove test-setup.js/ts + '!{projectRoot}/src/test-setup.[jt]s' ); // Dedupe and set nxJson.namedInputs.production = Array.from(new Set(productionFileSet)); diff --git a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts new file mode 100644 index 0000000000..add7fb0f72 --- /dev/null +++ b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts @@ -0,0 +1,51 @@ +import { Tree, readNxJson, updateNxJson } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import addTestSetupToIgnoredInputs from './add-test-setup-to-inputs-ignore'; + +describe('Jest Migration - jest 29 mocked usage in tests', () => { + let tree: Tree; + + beforeEach(() => { + tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + }); + + it('should add inputs configuration for test-setup if missing', async () => { + updateNxJson(tree, { + namedInputs: { + default: ['{projectRoot}/**/*', 'sharedGlobals'], + sharedGlobals: [], + production: ['default'], + }, + }); + + await addTestSetupToIgnoredInputs(tree); + + const updated = readNxJson(tree); + expect(updated.namedInputs.production).toMatchInlineSnapshot(` + [ + "default", + "!{projectRoot}/src/test-setup.[jt]s", + ] + `); + }); + + it('should not add inputs configuration for test-setup if existing', async () => { + updateNxJson(tree, { + namedInputs: { + default: ['{projectRoot}/**/*', 'sharedGlobals'], + sharedGlobals: [], + production: ['!{projectRoot}/src/test-setup.[jt]s', 'default'], + }, + }); + + await addTestSetupToIgnoredInputs(tree); + + const updated = readNxJson(tree); + expect(updated.namedInputs.production).toMatchInlineSnapshot(` + [ + "!{projectRoot}/src/test-setup.[jt]s", + "default", + ] + `); + }); +}); diff --git a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts new file mode 100644 index 0000000000..5aab603136 --- /dev/null +++ b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts @@ -0,0 +1,28 @@ +import { + NxJsonConfiguration, + Tree, + formatFiles, + readNxJson, + updateNxJson, +} from '@nx/devkit'; + +export async function addTestSetupToIgnoredInputs(tree: Tree) { + const nxJson: NxJsonConfiguration = readNxJson(tree); + + if (!nxJson) { + return; + } + if ( + nxJson.namedInputs?.production && + !nxJson.namedInputs.production.includes( + '!{projectRoot}/src/test-setup.[jt]s' + ) + ) { + nxJson.namedInputs.production.push('!{projectRoot}/src/test-setup.[jt]s'); + updateNxJson(tree, nxJson); + } + + await formatFiles(tree); +} + +export default addTestSetupToIgnoredInputs;