nx/packages/jest/src/migrations/update-14-1-5/update-exports-jest-config.spec.ts
2022-11-23 15:45:13 -05:00

191 lines
5.2 KiB
TypeScript

import {
readProjectConfiguration,
stripIndents,
Tree,
updateProjectConfiguration,
updateJson,
readJson,
} from '@nrwl/devkit';
import { createTree, createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
import { libraryGenerator as workspaceLib } from '@nrwl/workspace';
import {
updateExportsJestConfig,
updateRootFiles,
updateToDefaultExport,
} from './update-exports-jest-config';
describe('Jest Migration (v14.1.2)', () => {
let tree: Tree;
beforeEach(() => {
tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
});
it('should update root jest files', () => {
tree.write(
'jest.config.ts',
stripIndents`
const { getJestProjects } = require('@nrwl/jest');
module.exports = {
projects: getJestProjects()
};`
);
tree.write(
'jest.preset.ts',
stripIndents`
const nxPreset = require('@nrwl/jest/preset');
module.exports = { ...nxPreset };`
);
const status = updateRootFiles(tree);
expect(status).toEqual({ didUpdateRootPreset: true });
expect(tree.read('jest.config.ts', 'utf-8')).toEqual(stripIndents`
const { getJestProjects } = require('@nrwl/jest');
export default {
projects: getJestProjects()
};
`);
expect(tree.read('jest.preset.js', 'utf-8')).toEqual(stripIndents`
const nxPreset = require('@nrwl/jest/preset').default;
module.exports = { ...nxPreset };`);
});
it('should update individual project jest configs', async () => {
await workspaceLib(tree, { name: 'lib-one' });
tree.rename('jest.preset.js', 'jest.preset.ts');
tree.write(
'libs/lib-one/jest.config.ts',
`
const nxPreset = require('@nrwl/jest/preset');
const someOtherImport = require('../something/else.js');
module.exports = {
...someOtherImport,
...nxPreset,
displayName: 'lib-one',
preset: '../../jest.preset.ts',
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\\\.(html|svg)$',
},
},
coverageDirectory: '../../coverage/apps/lib-one',
transform: {
'^.+\\\\.(ts|mjs|js|html)$': 'jest-preset-angular',
},
transformIgnorePatterns: ['node_modules/(?!.*\\\\.mjs$)'],
snapshotSerializers: [
'jest-preset-angular/build/serializers/no-ng-attributes',
'jest-preset-angular/build/serializers/ng-snapshot',
'jest-preset-angular/build/serializers/html-comment',
],
};
`
);
updateJson(tree, 'package.json', (json) => {
delete json.devDependencies['ts-node'];
return json;
});
expect(
readJson(tree, 'package.json').devDependencies['ts-node']
).toBeUndefined();
updateExportsJestConfig(tree);
const config = tree.read('libs/lib-one/jest.config.ts', 'utf-8');
expect(readJson(tree, 'package.json').devDependencies['ts-node']).toEqual(
'10.9.1'
);
expect(config).toMatchSnapshot();
});
it('should work with multiple configurations', async () => {
await workspaceLib(tree, { name: 'lib-one' });
tree.rename('jest.preset.js', 'jest.preset.ts');
updateProjectConfiguration(tree, 'lib-one', {
...readProjectConfiguration(tree, 'lib-one'),
targets: {
test: {
executor: '@nrwl/jest:jest',
options: {
jestConfig: 'libs/lib-one/jest.config.ts',
passWithoutTests: true,
},
configurations: {
production: {
silent: true,
},
},
},
},
});
tree.write(
'libs/lib-one/jest.config.ts',
`
const nxPreset = require('@nrwl/jest/preset');
const someOtherImport = require('../something/else.js');
module.exports = {
...someOtherImport,
...nxPreset,
displayName: 'lib-one',
preset: '../../jest.preset.ts',
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\\\.(html|svg)$',
},
},
coverageDirectory: '../../coverage/apps/lib-one',
transform: {
'^.+\\\\.(ts|mjs|js|html)$': 'jest-preset-angular',
},
transformIgnorePatterns: ['node_modules/(?!.*\\\\.mjs$)'],
snapshotSerializers: [
'jest-preset-angular/build/serializers/no-ng-attributes',
'jest-preset-angular/build/serializers/ng-snapshot',
'jest-preset-angular/build/serializers/html-comment',
],
};
`
);
updateExportsJestConfig(tree);
const config = tree.read('libs/lib-one/jest.config.ts', 'utf-8');
expect(config).toMatchSnapshot();
expect(tree.exists('jest.preset.ts')).toBeFalsy();
expect(tree.exists('jest.preset.js')).toBeTruthy();
});
it('should convert module.exports => export default', () => {
tree = createTree();
tree.write(
'jest.config.js',
stripIndents`
const { getJestProjects } = require('@nrwl/jest');
const nxPreset = require('@nrwl/jest/preset');
const someFn = () => ({more: 'stuff'});
module.export.abc = someFn;
module.exports = {
...nxPreset,
more: 'stuff',
someFn,
projects: getJestProjects()
};`
);
updateToDefaultExport(tree, 'jest.config.js');
expect(tree.read('jest.config.js', 'utf-8')).toMatchSnapshot();
});
});