fix(testing): only install dependency for the desired --testEnvironment (#15244)
This commit is contained in:
parent
e8f19d8cb0
commit
2d2804b0c1
@ -21,6 +21,13 @@
|
|||||||
"description": "Do not add dependencies to `package.json`.",
|
"description": "Do not add dependencies to `package.json`.",
|
||||||
"x-priority": "internal"
|
"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": {
|
"js": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
@ -41,7 +41,7 @@
|
|||||||
},
|
},
|
||||||
"testEnvironment": {
|
"testEnvironment": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["jsdom", "node"],
|
"enum": ["jsdom", "node", "none"],
|
||||||
"description": "The test environment for jest.",
|
"description": "The test environment for jest.",
|
||||||
"default": "jsdom",
|
"default": "jsdom",
|
||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
|
|||||||
@ -131,6 +131,40 @@ export default {
|
|||||||
expect(packageJson.devDependencies['@types/jest']).toBeDefined();
|
expect(packageJson.devDependencies['@types/jest']).toBeDefined();
|
||||||
expect(packageJson.devDependencies['ts-jest']).toBeDefined();
|
expect(packageJson.devDependencies['ts-jest']).toBeDefined();
|
||||||
expect(packageJson.devDependencies['ts-node']).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 () => {
|
it('should make js jest files', async () => {
|
||||||
|
|||||||
@ -33,6 +33,7 @@ const schemaDefaults = {
|
|||||||
compiler: 'tsc',
|
compiler: 'tsc',
|
||||||
js: false,
|
js: false,
|
||||||
rootProject: false,
|
rootProject: false,
|
||||||
|
testEnvironment: 'jsdom',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
function generateGlobalConfig(tree: Tree, isJS: boolean) {
|
function generateGlobalConfig(tree: Tree, isJS: boolean) {
|
||||||
@ -146,7 +147,6 @@ function updateDependencies(tree: Tree, options: NormalizedSchema) {
|
|||||||
const devDeps = {
|
const devDeps = {
|
||||||
'@nrwl/jest': nxVersion,
|
'@nrwl/jest': nxVersion,
|
||||||
jest: jestVersion,
|
jest: jestVersion,
|
||||||
'jest-environment-jsdom': jestVersion,
|
|
||||||
|
|
||||||
// because the default jest-preset uses ts-jest,
|
// because the default jest-preset uses ts-jest,
|
||||||
// jest will throw an error if it's not installed
|
// jest will throw an error if it's not installed
|
||||||
@ -154,6 +154,10 @@ function updateDependencies(tree: Tree, options: NormalizedSchema) {
|
|||||||
'ts-jest': tsJestVersion,
|
'ts-jest': tsJestVersion,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (options.testEnvironment !== 'none') {
|
||||||
|
devDeps[`jest-environment-${options.testEnvironment}`] = jestVersion;
|
||||||
|
}
|
||||||
|
|
||||||
if (!options.js) {
|
if (!options.js) {
|
||||||
devDeps['ts-node'] = tsNodeVersion;
|
devDeps['ts-node'] = tsNodeVersion;
|
||||||
devDeps['@types/jest'] = jestTypesVersion;
|
devDeps['@types/jest'] = jestTypesVersion;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ export interface JestInitSchema {
|
|||||||
compiler?: 'tsc' | 'babel' | 'swc';
|
compiler?: 'tsc' | 'babel' | 'swc';
|
||||||
js?: boolean;
|
js?: boolean;
|
||||||
skipPackageJson?: boolean;
|
skipPackageJson?: boolean;
|
||||||
|
testEnvironment?: 'node' | 'jsdom' | 'none';
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -18,6 +18,13 @@
|
|||||||
"description": "Do not add dependencies to `package.json`.",
|
"description": "Do not add dependencies to `package.json`.",
|
||||||
"x-priority": "internal"
|
"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": {
|
"js": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
@ -18,15 +18,13 @@ const schemaDefaults = {
|
|||||||
skipSetupFile: false,
|
skipSetupFile: false,
|
||||||
skipSerializers: false,
|
skipSerializers: false,
|
||||||
rootProject: false,
|
rootProject: false,
|
||||||
|
testEnvironment: 'jsdom',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
function normalizeOptions(options: JestProjectSchema) {
|
function normalizeOptions(options: JestProjectSchema) {
|
||||||
if (!options.testEnvironment) {
|
if (!options.testEnvironment) {
|
||||||
options.testEnvironment = 'jsdom';
|
options.testEnvironment = 'jsdom';
|
||||||
}
|
}
|
||||||
if (options.testEnvironment === 'jsdom') {
|
|
||||||
options.testEnvironment = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!options.hasOwnProperty('supportTsx')) {
|
if (!options.hasOwnProperty('supportTsx')) {
|
||||||
options.supportTsx = false;
|
options.supportTsx = false;
|
||||||
|
|||||||
@ -31,6 +31,11 @@ export function createFiles(tree: Tree, options: JestProjectSchema) {
|
|||||||
generateFiles(tree, join(__dirname, filesFolder), projectConfig.root, {
|
generateFiles(tree, join(__dirname, filesFolder), projectConfig.root, {
|
||||||
tmpl: '',
|
tmpl: '',
|
||||||
...options,
|
...options,
|
||||||
|
// jsdom is the default
|
||||||
|
testEnvironment:
|
||||||
|
options.testEnvironment === 'none' || options.testEnvironment === 'jsdom'
|
||||||
|
? ''
|
||||||
|
: options.testEnvironment,
|
||||||
transformer,
|
transformer,
|
||||||
transformerOptions,
|
transformerOptions,
|
||||||
js: !!options.js,
|
js: !!options.js,
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export interface JestProjectSchema {
|
|||||||
skipSetupFile?: boolean;
|
skipSetupFile?: boolean;
|
||||||
setupFile?: 'angular' | 'web-components' | 'none';
|
setupFile?: 'angular' | 'web-components' | 'none';
|
||||||
skipSerializers?: boolean;
|
skipSerializers?: boolean;
|
||||||
testEnvironment?: 'node' | 'jsdom' | '';
|
testEnvironment?: 'node' | 'jsdom' | 'none';
|
||||||
/**
|
/**
|
||||||
* @deprecated use compiler: "babel" instead
|
* @deprecated use compiler: "babel" instead
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
},
|
},
|
||||||
"testEnvironment": {
|
"testEnvironment": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["jsdom", "node"],
|
"enum": ["jsdom", "node", "none"],
|
||||||
"description": "The test environment for jest.",
|
"description": "The test environment for jest.",
|
||||||
"default": "jsdom",
|
"default": "jsdom",
|
||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
|
|||||||
@ -47,7 +47,9 @@ export async function initGenerator(tree: Tree, schema: Schema) {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
if (options.unitTestRunner === 'jest') {
|
if (options.unitTestRunner === 'jest') {
|
||||||
tasks.push(await jestInitGenerator(tree, schema));
|
tasks.push(
|
||||||
|
await jestInitGenerator(tree, { ...schema, testEnvironment: 'node' })
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.push(updateDependencies(tree));
|
tasks.push(updateDependencies(tree));
|
||||||
|
|||||||
@ -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 () => {
|
it('adds srcRootForCompilationRoot', async () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user