Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ module.exports = {
```
* Remove possibilities to import `mocked`, `createJestPreset`, `pathsToModuleNameMapper` from package entry. One should change to
```
import { mocked, createJestPreset, pathsToModuleNameMapper` } from 'ts-jest/utils'
import { mocked, createJestPreset, pathsToModuleNameMapper } from 'ts-jest/utils'
```
* **config:** One currently uses `tsConfig` should change to `tsconfig` in your `jest.config.js` or `package.json`.

Expand Down
67 changes: 67 additions & 0 deletions src/cli/__snapshots__/cli.spec.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`config migrate should migrate preset if valid preset value is used 1`] = `
"
No migration needed for given Jest configuration
"
`;

exports[`config migrate should migrate preset if valid preset value is used 2`] = `
"\\"jest\\": {
\\"preset\\": \\"ts-jest\\"
}
"
`;

exports[`config migrate should migrate preset if valid preset value is used 3`] = `
"
No migration needed for given Jest configuration
"
`;

exports[`config migrate should reset testMatch if testRegex is used 1`] = `
"\\"jest\\": {
\\"testRegex\\": \\"foo-pattern\\",
\\"preset\\": \\"ts-jest\\"
}
"
`;

exports[`config migrate should reset testMatch if testRegex is used 2`] = `
"\\"jest\\": {
\\"testRegex\\": [
\\"foo-pattern\\"
],
\\"preset\\": \\"ts-jest\\"
}
"
`;

exports[`config migrate should reset testMatch if testRegex is used 3`] = `
"\\"jest\\": {
\\"testRegex\\": [],
\\"testMatch\\": [
\\"**/__tests__/**/*.(spec|test).[tj]s?(x)\\"
],
\\"preset\\": \\"ts-jest\\"
}
"
`;

exports[`config migrate should reset testMatch if testRegex is used 4`] = `
"\\"jest\\": {
\\"testMatch\\": [
\\"**/__tests__/**/*.(spec|test).[tj]s?(x)\\"
],
\\"preset\\": \\"ts-jest\\"
}
"
`;

exports[`config migrate should reset testMatch if testRegex is used 5`] = `
"\\"jest\\": {
\\"testRegex\\": \\"foo-pattern\\",
\\"preset\\": \\"ts-jest\\"
}
"
`;
78 changes: 60 additions & 18 deletions src/cli/cli.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -413,27 +413,69 @@ Migrated Jest configuration:
`)
})

it('should reset testMatch if testRegex is used', async () => {
test.each([
{
jest: {
preset: 'ts-jest',
},
},
{
jest: {
preset: 'ts-jest/foo',
},
},
{
jest: {
preset: 'foo-preset',
},
},
])('should migrate preset if valid preset value is used', async (jestCfg) => {
expect.assertions(1)
fs.existsSync.mockImplementation(() => true)
jest.mock(
pkgPaths.next,
() => ({
jest: {
testRegex: 'foo-pattern',
},
}),
{ virtual: true },
)
jest.mock(pkgPaths.next, () => jestCfg, { virtual: true })

const res = await runCli(...noOption, pkgPaths.current)
expect(res.stdout).toMatchInlineSnapshot(`
"\\"jest\\": {
\\"testRegex\\": \\"foo-pattern\\",
\\"preset\\": \\"ts-jest\\",
\\"testMatch\\": null
}
"
`)

expect(res.stdout ? res.stdout : res.stderr).toMatchSnapshot()
})

test.each([
{
jest: {
testRegex: 'foo-pattern',
testMatch: ['**/__tests__/**/*.(spec|test).[tj]s?(x)'],
},
},
{
jest: {
testRegex: ['foo-pattern'],
testMatch: ['**/__tests__/**/*.(spec|test).[tj]s?(x)'],
},
},
{
jest: {
testRegex: [],
testMatch: ['**/__tests__/**/*.(spec|test).[tj]s?(x)'],
},
},
{
jest: {
testMatch: ['**/__tests__/**/*.(spec|test).[tj]s?(x)'],
},
},
{
jest: {
testRegex: 'foo-pattern',
},
},
])('should reset testMatch if testRegex is used', async (jestCfg) => {
expect.assertions(1)
fs.existsSync.mockImplementation(() => true)
jest.mock(pkgPaths.next, () => jestCfg, { virtual: true })

const res = await runCli(...noOption, pkgPaths.current)

expect(res.stdout).toMatchSnapshot()
})

it('should detect best preset', async () => {
Expand Down
27 changes: 13 additions & 14 deletions src/cli/config/migrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,41 +71,40 @@ export const run: CliCommand = async (args: Arguments /* , logger: Logger*/) =>
}
}
// ensure we are using a preset
presetName = presetName || JestPresetNames.default
presetName = presetName ?? JestPresetNames.default
preset = allPresets[presetName]
footNotes.push(
`Detected preset '${preset.label}' as the best matching preset for your configuration.
Visit https://kulshekhar.github.io/ts-jest/user/config/#jest-preset for more information about presets.
`,
)
} else if (migratedConfig.preset && migratedConfig.preset.startsWith('ts-jest')) {
} else if (migratedConfig.preset?.startsWith('ts-jest')) {
if (args.jestPreset === false) {
delete migratedConfig.preset
} else {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
preset = (allPresets as any)[migratedConfig.preset] || defaults
preset = (allPresets as any)[migratedConfig.preset] ?? defaults
}
}

// enforce the correct name
if (preset) migratedConfig.preset = preset.name

// check the extensions
if (migratedConfig.moduleFileExtensions && migratedConfig.moduleFileExtensions.length && preset) {
const presetValue = dedupSort(preset.value.moduleFileExtensions || []).join('::')
if (migratedConfig.moduleFileExtensions?.length && preset) {
const presetValue = dedupSort(preset.value.moduleFileExtensions ?? []).join('::')
const migratedValue = dedupSort(migratedConfig.moduleFileExtensions).join('::')
if (presetValue === migratedValue) {
delete migratedConfig.moduleFileExtensions
}
}
// there is a testRegex, remove our testMatch
if (migratedConfig.testRegex && preset) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
migratedConfig.testMatch = null as any
if ((typeof migratedConfig.testRegex === 'string' || migratedConfig.testRegex?.length) && preset) {
delete migratedConfig.testMatch
}
// check the testMatch
else if (migratedConfig.testMatch && migratedConfig.testMatch.length && preset) {
const presetValue = dedupSort(preset.value.testMatch || []).join('::')
else if (migratedConfig.testMatch?.length && preset) {
const presetValue = dedupSort(preset.value.testMatch ?? []).join('::')
const migratedValue = dedupSort(migratedConfig.testMatch).join('::')
if (presetValue === migratedValue) {
delete migratedConfig.testMatch
Expand Down Expand Up @@ -190,20 +189,20 @@ function cleanupConfig(config: Config.InitialOptions): void {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
delete (config as any).globals['ts-jest']
}
if (Object.keys(config.globals).length === 0) {
if (!Object.keys(config.globals).length) {
delete config.globals
}
}
if (config.transform && Object.keys(config.transform).length === 0) {
if (config.transform && !Object.keys(config.transform).length) {
delete config.transform
}
if (config.moduleFileExtensions) {
config.moduleFileExtensions = dedupSort(config.moduleFileExtensions)
if (config.moduleFileExtensions.length === 0) delete config.moduleFileExtensions
if (!config.moduleFileExtensions.length) delete config.moduleFileExtensions
}
if (config.testMatch) {
config.testMatch = dedupSort(config.testMatch)
if (config.testMatch.length === 0) delete config.testMatch
if (!config.testMatch.length) delete config.testMatch
}
if (config.preset === JestPresetNames.default) config.preset = defaults.name
}
Expand Down