Skip to content

Commit

Permalink
fix(testing): only install dependency for the desired --testEnvironme…
Browse files Browse the repository at this point in the history
…nt (#15244)

(cherry picked from commit 2d2804b)
  • Loading branch information
barbados-clemens authored and FrozenPandaz committed Mar 2, 2023
1 parent 2f8ca66 commit 908cf41
Show file tree
Hide file tree
Showing 12 changed files with 72 additions and 8 deletions.
7 changes: 7 additions & 0 deletions docs/generated/packages/jest/generators/init.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@
"description": "Do not add dependencies to `package.json`.",
"x-priority": "internal"
},
"testEnvironment": {
"type": "string",
"enum": ["jsdom", "node", "none"],
"description": "The test environment for jest. This controls which jest-environment-* package is installed",
"default": "jsdom",
"x-priority": "important"
},
"js": {
"type": "boolean",
"default": false,
Expand Down
2 changes: 1 addition & 1 deletion docs/generated/packages/jest/generators/jest-project.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
},
"testEnvironment": {
"type": "string",
"enum": ["jsdom", "node"],
"enum": ["jsdom", "node", "none"],
"description": "The test environment for jest.",
"default": "jsdom",
"x-priority": "important"
Expand Down
34 changes: 34 additions & 0 deletions packages/jest/src/generators/init/init.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,40 @@ export default {
expect(packageJson.devDependencies['@types/jest']).toBeDefined();
expect(packageJson.devDependencies['ts-jest']).toBeDefined();
expect(packageJson.devDependencies['ts-node']).toBeDefined();
expect(packageJson.devDependencies['jest-environment-jsdom']).toBeDefined();
expect(
packageJson.devDependencies['jest-environment-node']
).not.toBeDefined();
});

it('should add dependencies --testEnvironment=node', async () => {
await jestInitGenerator(tree, { testEnvironment: 'node' });
const packageJson = readJson(tree, 'package.json');
expect(packageJson.devDependencies.jest).toBeDefined();
expect(packageJson.devDependencies['@nrwl/jest']).toBeDefined();
expect(packageJson.devDependencies['@types/jest']).toBeDefined();
expect(packageJson.devDependencies['ts-jest']).toBeDefined();
expect(packageJson.devDependencies['ts-node']).toBeDefined();
expect(packageJson.devDependencies['jest-environment-node']).toBeDefined();
expect(
packageJson.devDependencies['jest-environment-jsdom']
).not.toBeDefined();
});

it('should add dependencies --testEnvironment=none', async () => {
await jestInitGenerator(tree, { testEnvironment: 'none' });
const packageJson = readJson(tree, 'package.json');
expect(packageJson.devDependencies.jest).toBeDefined();
expect(packageJson.devDependencies['@nrwl/jest']).toBeDefined();
expect(packageJson.devDependencies['@types/jest']).toBeDefined();
expect(packageJson.devDependencies['ts-jest']).toBeDefined();
expect(packageJson.devDependencies['ts-node']).toBeDefined();
expect(
packageJson.devDependencies['jest-environment-jsdom']
).not.toBeDefined();
expect(
packageJson.devDependencies['jest-environment-node']
).not.toBeDefined();
});

it('should make js jest files', async () => {
Expand Down
6 changes: 5 additions & 1 deletion packages/jest/src/generators/init/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const schemaDefaults = {
compiler: 'tsc',
js: false,
rootProject: false,
testEnvironment: 'jsdom',
} as const;

function generateGlobalConfig(tree: Tree, isJS: boolean) {
Expand Down Expand Up @@ -146,14 +147,17 @@ function updateDependencies(tree: Tree, options: NormalizedSchema) {
const devDeps = {
'@nrwl/jest': nxVersion,
jest: jestVersion,
'jest-environment-jsdom': jestVersion,

// because the default jest-preset uses ts-jest,
// jest will throw an error if it's not installed
// even if not using it in overriding transformers
'ts-jest': tsJestVersion,
};

if (options.testEnvironment !== 'none') {
devDeps[`jest-environment-${options.testEnvironment}`] = jestVersion;
}

if (!options.js) {
devDeps['ts-node'] = tsNodeVersion;
devDeps['@types/jest'] = jestTypesVersion;
Expand Down
1 change: 1 addition & 0 deletions packages/jest/src/generators/init/schema.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export interface JestInitSchema {
compiler?: 'tsc' | 'babel' | 'swc';
js?: boolean;
skipPackageJson?: boolean;
testEnvironment?: 'node' | 'jsdom' | 'none';
/**
* @deprecated
*/
Expand Down
7 changes: 7 additions & 0 deletions packages/jest/src/generators/init/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
"description": "Do not add dependencies to `package.json`.",
"x-priority": "internal"
},
"testEnvironment": {
"type": "string",
"enum": ["jsdom", "node", "none"],
"description": "The test environment for jest. This controls which jest-environment-* package is installed",
"default": "jsdom",
"x-priority": "important"
},
"js": {
"type": "boolean",
"default": false,
Expand Down
4 changes: 1 addition & 3 deletions packages/jest/src/generators/jest-project/jest-project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,13 @@ const schemaDefaults = {
skipSetupFile: false,
skipSerializers: false,
rootProject: false,
testEnvironment: 'jsdom',
} as const;

function normalizeOptions(options: JestProjectSchema) {
if (!options.testEnvironment) {
options.testEnvironment = 'jsdom';
}
if (options.testEnvironment === 'jsdom') {
options.testEnvironment = '';
}

if (!options.hasOwnProperty('supportTsx')) {
options.supportTsx = false;
Expand Down
5 changes: 5 additions & 0 deletions packages/jest/src/generators/jest-project/lib/create-files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ export function createFiles(tree: Tree, options: JestProjectSchema) {
generateFiles(tree, join(__dirname, filesFolder), projectConfig.root, {
tmpl: '',
...options,
// jsdom is the default
testEnvironment:
options.testEnvironment === 'none' || options.testEnvironment === 'jsdom'
? ''
: options.testEnvironment,
transformer,
transformerOptions,
js: !!options.js,
Expand Down
2 changes: 1 addition & 1 deletion packages/jest/src/generators/jest-project/schema.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export interface JestProjectSchema {
skipSetupFile?: boolean;
setupFile?: 'angular' | 'web-components' | 'none';
skipSerializers?: boolean;
testEnvironment?: 'node' | 'jsdom' | '';
testEnvironment?: 'node' | 'jsdom' | 'none';
/**
* @deprecated use compiler: "babel" instead
*/
Expand Down
2 changes: 1 addition & 1 deletion packages/jest/src/generators/jest-project/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
},
"testEnvironment": {
"type": "string",
"enum": ["jsdom", "node"],
"enum": ["jsdom", "node", "none"],
"description": "The test environment for jest.",
"default": "jsdom",
"x-priority": "important"
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/generators/init/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ export async function initGenerator(tree: Tree, schema: Schema) {
})
);
if (options.unitTestRunner === 'jest') {
tasks.push(await jestInitGenerator(tree, schema));
tasks.push(
await jestInitGenerator(tree, { ...schema, testEnvironment: 'node' })
);
}

tasks.push(updateDependencies(tree));
Expand Down
6 changes: 6 additions & 0 deletions packages/node/src/generators/library/library.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ describe('lib', () => {
},
},
});
expect(
readJson(tree, 'package.json').devDependencies['jest-environment-jsdom']
).not.toBeDefined();
expect(
readJson(tree, 'package.json').devDependencies['jest-environment-node']
).toBeDefined();
});

it('adds srcRootForCompilationRoot', async () => {
Expand Down

0 comments on commit 908cf41

Please sign in to comment.