fix(testing): use root preset for snapshot config changes first (#15237)

This commit is contained in:
Caleb Ukle 2023-02-24 12:11:31 -06:00 committed by GitHub
parent 0a8c5db482
commit 8c7a27f3da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 309 additions and 174 deletions

View File

@ -1,6 +1,31 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Jest Migration - jest 29 update configs should be idempotent 1`] = `
exports[`Jest Migration - jest 29 update configs should NOT update ts-jest with no globals are preset 1`] = `
"const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
...nxPreset,
testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
transform: {
'^.+\\\\.(ts|js|html)$': 'ts-jest',
},
resolver: '@nrwl/jest/plugins/resolver',
moduleFileExtensions: ['ts', 'js', 'html'],
coverageReporters: ['html'],
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx affected --targets=test --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
};
"
`;
exports[`Jest Migration - jest 29 update configs should add snapshot config with no root preset 1`] = `
"/* eslint-disable */
export default {
displayName: 'my-lib',
@ -19,7 +44,7 @@ coverageDirectory: '../../coverage/libs/my-lib',
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* Example: From within the project directory, run \\"nx test --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
@ -27,7 +52,7 @@ snapshotFormat: { escapeString: true, printBasicPrototype: true }
"
`;
exports[`Jest Migration - jest 29 update configs should be idempotent 2`] = `
exports[`Jest Migration - jest 29 update configs should add snapshot config with no root preset 2`] = `
"module.exports = {
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
@ -50,7 +75,7 @@ preset: '../../jest.preset.js',
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* Example: From within the project directory, run \\"nx test --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
@ -58,6 +83,44 @@ snapshotFormat: { escapeString: true, printBasicPrototype: true }
"
`;
exports[`Jest Migration - jest 29 update configs should be idempotent 1`] = `
"/* eslint-disable */
export default {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json',
}]
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib'
};
"
`;
exports[`Jest Migration - jest 29 update configs should be idempotent 2`] = `
"module.exports = {
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json'
}]
},
// I am a comment and shouldn't be removed
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
globals: { something: 'else',
abc: [1234, true, {abc: 'yes'}] },
/**
* Multi-line comment shouldn't be removed
*/
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js'
};
"
`;
exports[`Jest Migration - jest 29 update configs should update globalThis.ngJest.teardown to testEnvironmentOptions 1`] = `
"globalThis.ngJest = {
@ -75,16 +138,6 @@ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test jest-preset-angular --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true },
testEnvironmentOptions: { teardown: true },
};"
`;
@ -97,57 +150,37 @@ globalThis.ngJest = {
}
module.exports = {
globals: { },
transform: {
globals: { },
transform: {
'^.+.(ts|mjs|js|html)$': ['jest-preset-angular', {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\\\.(html|svg)$',
}],
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
testEnvironmentOptions: {
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
testEnvironmentOptions: {
blah: 123,
teardown: false
},
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test jest-preset-angular --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
};"
`;
exports[`Jest Migration - jest 29 update configs should update jest.config.ts 1`] = `
"/* eslint-disable */
export default {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json',
}]
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib'
};
"
`;
@ -168,14 +201,90 @@ abc: [1234, true, {abc: 'yes'}] },
*/
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
preset: '../../jest.preset.js'
};
"
`;
exports[`Jest Migration - jest 29 update configs should update root preset 1`] = `
"
const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
...nxPreset,
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* Example: \\"nx affected --targets=test --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
}"
`;
exports[`Jest Migration - jest 29 update configs should update root preset 2`] = `
"/* eslint-disable */
export default {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json',
}]
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib'
};
"
`;
exports[`Jest Migration - jest 29 update configs should update root preset 3`] = `
"module.exports = {
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json'
}]
},
// I am a comment and shouldn't be removed
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
globals: { something: 'else',
abc: [1234, true, {abc: 'yes'}] },
/**
* Multi-line comment shouldn't be removed
*/
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js'
};
"
`;
exports[`Jest Migration - jest 29 update configs should update root preset if ts-jest is preset 1`] = `
"const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
...nxPreset,
testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
globals: { something: 'else',
abc: [1234, true, {abc: 'yes'}] },
transform: {
'^.+\\\\.(ts|js|html)$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json'
}],
},
resolver: '@nrwl/jest/plugins/resolver',
moduleFileExtensions: ['ts', 'js', 'html'],
coverageReporters: ['html'],
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx affected --targets=test --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
@ -185,45 +294,25 @@ snapshotFormat: { escapeString: true, printBasicPrototype: true }
exports[`Jest Migration - jest 29 update configs should work if not using ts-jest transformer 1`] = `
"export default {
transform: {
transform: {
'^.+\\\\\\\\.[tj]sx?$': 'babel-jest',
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test no-ts-jest --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html']
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
};"
`;
exports[`Jest Migration - jest 29 update configs should work if not using ts-jest transformer 2`] = `
"module.exports = {
transform: {
transform: {
'^.+\\\\\\\\.[tj]sx?$': 'babel-jest',
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test no-ts-jest --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html']
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
};"
`;
@ -261,79 +350,49 @@ abc: [1234, true, {abc: 'yes'}] },
exports[`Jest Migration - jest 29 update configs should work with jest-preset-angular 1`] = `
"export default {
globals: { },
transform: {
globals: { },
transform: {
'^.+.(ts|mjs|js|html)$': ['jest-preset-angular', {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\\\.(html|svg)$',
}],
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test jest-preset-angular --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html']
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
};"
`;
exports[`Jest Migration - jest 29 update configs should work with jest-preset-angular 2`] = `
"module.exports = {
globals: { },
transform: {
globals: { },
transform: {
'^.+.(ts|mjs|js|html)$': ['jest-preset-angular', {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\\\.(html|svg)$',
}],
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test jest-preset-angular --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html']
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
};"
`;
exports[`Jest Migration - jest 29 update configs should work with multiple projects + configs 1`] = `
"/* eslint-disable */
export default {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
displayName: 'my-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json',
}]
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/my-lib'
};
"
`;
@ -354,17 +413,7 @@ abc: [1234, true, {abc: 'yes'}] },
*/
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test my-lib --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
preset: '../../jest.preset.js'
};
"
`;
@ -372,26 +421,16 @@ snapshotFormat: { escapeString: true, printBasicPrototype: true }
exports[`Jest Migration - jest 29 update configs should work with multiple projects + configs 3`] = `
"/* eslint-disable */
export default {
displayName: 'another-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
displayName: 'another-lib',
preset: '../../jest.preset.js',
globals: { },
transform: {
'^.+\\\\\\\\.[tj]sx?$': ['ts-jest', {
tsconfig: '<rootDir>/tsconfig.spec.json',
}]
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/another-lib',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test another-lib --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/libs/another-lib'
};
"
`;
@ -412,17 +451,7 @@ abc: [1234, true, {abc: 'yes'}] },
*/
displayName: 'jest',
testEnvironment: 'node',
preset: '../../jest.preset.js',
/* TODO: Update to latest Jest snapshotFormat
* By default Nx has kept the older style of Jest Snapshot formats
* to prevent breaking of any existing tests with snapshots.
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: \\"nx test another-lib --update-snapshot\\"
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
preset: '../../jest.preset.js'
};
"
`;

View File

@ -35,6 +35,86 @@ describe('Jest Migration - jest 29 update configs', () => {
expect(actualJestConfigJs).toMatchSnapshot();
});
it('should update root preset', async () => {
await setup(tree, 'my-lib');
await updateConfigsJest29(tree);
const actualPreset = tree.read('jest.preset.js', 'utf-8');
expect(actualPreset).toMatchSnapshot();
const actualJestConfigTs = tree.read('libs/my-lib/jest.config.ts', 'utf-8');
expect(actualJestConfigTs).toMatchSnapshot();
const actualJestConfigJs = tree.read('libs/my-lib/jest.config.js', 'utf-8');
expect(actualJestConfigJs).toMatchSnapshot();
});
it('should update root preset if ts-jest is preset', async () => {
await setup(tree, 'my-lib');
tree.write(
'jest.preset.js',
`const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
...nxPreset,
testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json'
},
something: 'else',
abc: [1234, true, {abc: 'yes'}]
},
transform: {
'^.+\\.(ts|js|html)$': 'ts-jest',
},
resolver: '@nrwl/jest/plugins/resolver',
moduleFileExtensions: ['ts', 'js', 'html'],
coverageReporters: ['html'],
};
`
);
await updateConfigsJest29(tree);
const actualPreset = tree.read('jest.preset.js', 'utf-8');
expect(actualPreset).toMatchSnapshot();
});
it('should NOT update ts-jest with no globals are preset', async () => {
await setup(tree, 'my-lib');
tree.write(
'jest.preset.js',
`const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
...nxPreset,
testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
transform: {
'^.+\\.(ts|js|html)$': 'ts-jest',
},
resolver: '@nrwl/jest/plugins/resolver',
moduleFileExtensions: ['ts', 'js', 'html'],
coverageReporters: ['html'],
};
`
);
await updateConfigsJest29(tree);
const actualPreset = tree.read('jest.preset.js', 'utf-8');
expect(actualPreset).toMatchSnapshot();
});
it('should add snapshot config with no root preset', async () => {
await setup(tree, 'my-lib');
tree.delete('jest.preset.js');
await updateConfigsJest29(tree);
const actualJestConfigTs = tree.read('libs/my-lib/jest.config.ts', 'utf-8');
expect(actualJestConfigTs).toMatchSnapshot();
const actualJestConfigJs = tree.read('libs/my-lib/jest.config.js', 'utf-8');
expect(actualJestConfigJs).toMatchSnapshot();
});
it('should work with multiple projects + configs', async () => {
await setup(tree, 'my-lib');
await setup(tree, 'another-lib', projectGraph);

View File

@ -10,8 +10,11 @@ import { tsquery } from '@phenomnomnominal/tsquery';
import * as ts from 'typescript';
import { JestExecutorOptions } from '../../executors/jest/schema';
import { forEachExecutorOptionsInGraph } from '@nrwl/workspace/src/utilities/executor-options-utils';
import { findRootJestPreset } from '../../utils/config/find-root-jest-files';
export async function updateConfigsJest29(tree: Tree) {
const rootPreset = findRootJestPreset(tree);
const targetsWithJest = new Set<string>();
// have to use graph so the negative configuration targets are expanded
const graph = await createProjectGraphAsync();
forEachExecutorOptionsInGraph<JestExecutorOptions>(
@ -19,18 +22,31 @@ export async function updateConfigsJest29(tree: Tree) {
'@nrwl/jest:jest',
(options, projectName, targetName) => {
if (options.jestConfig && tree.exists(options.jestConfig)) {
addSnapshotOptionsToConfig(
tree,
options.jestConfig,
projectName,
targetName
);
targetsWithJest.add(targetName);
// if the default root preset exists or if the project doesn't have a 'preset' configured
// -> update snapshot config
if (!rootPreset || !hasPresetConfigured(tree, options.jestConfig)) {
addSnapshotOptionsToConfig(
tree,
options.jestConfig,
`From within the project directory, run "nx test --update-snapshot"`
);
}
updateTsJestOptions(tree, options.jestConfig);
updateNgJestOptions(tree, options.jestConfig);
}
}
);
if (rootPreset && tree.exists(rootPreset)) {
const cmd = `"nx affected --targets=${Array.from(targetsWithJest).join(
','
)} --update-snapshot"`;
addSnapshotOptionsToConfig(tree, rootPreset, cmd);
updateTsJestOptions(tree, rootPreset);
updateNgJestOptions(tree, rootPreset);
}
await formatFiles(tree);
logger.info(stripIndents`NX Jest Snapshot format changed in v29.
By default Nx kept the older style to prevent breaking of existing tests with snapshots.
@ -43,8 +59,7 @@ More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format`);
function addSnapshotOptionsToConfig(
tree: Tree,
configPath: string,
projectName: string,
targetName: string
updateSnapshotExample: string
) {
const config = tree.read(configPath, 'utf-8');
const hasSnapshotOptions = tsquery.query(
@ -66,7 +81,7 @@ ${node.properties.map((p) => getNodeWithComments(config, p)).join(',\n')},
* It's recommend you update to the latest format.
* You can do this by removing snapshotFormat property
* and running tests with --update-snapshot flag.
* Example: "nx ${targetName} ${projectName} --update-snapshot"
* Example: ${updateSnapshotExample}
* More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format
*/
snapshotFormat: { escapeString: true, printBasicPrototype: true }
@ -78,6 +93,17 @@ snapshotFormat: { escapeString: true, printBasicPrototype: true }
tree.write(configPath, updatedConfig);
}
function hasPresetConfigured(tree: Tree, configPath: string): boolean {
const contents = tree.read(configPath, 'utf-8');
return (
tsquery.query(
contents,
`${TS_QUERY_JEST_CONFIG_PREFIX} > ObjectLiteralExpression PropertyAssignment:has(Identifier[name="preset"])`
)?.length > 0
);
}
function updateTsJestOptions(tree: Tree, configPath: string) {
// query for the globals property, if they don't have one then there's nothing to modify.
const contents = tree.read(configPath, 'utf-8');