Skip to content

Commit

Permalink
feat: update jest to v27
Browse files Browse the repository at this point in the history
Fixes vuejs#6602

This commit updates the generated project to use:
- jest v27, as an explicit dependency
- ts-jest and babel-jest v27
- vue3-jest as a transformer for Vue 3 projects
- vue2-jest as a transformer for Vue 2 projects

The default Babel transformer has been updated to work with Jest v27 as well.
  • Loading branch information
cexbrayat committed Aug 8, 2021
1 parent cf1022d commit 6d59435
Show file tree
Hide file tree
Showing 9 changed files with 2,496 additions and 582 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"@vuepress/plugin-pwa": "^1.8.1",
"@vuepress/theme-vue": "^1.8.1",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "^26.6.3",
"babel-jest": "^27.0.6",
"chromedriver": "^92.0.0",
"debug": "^4.1.0",
"eslint": "^7.32.0",
Expand All @@ -57,7 +57,7 @@
"graphql": "^15.5.0",
"http-server": "^0.12.3",
"inquirer": "^8.0.0",
"jest": "^26.6.3",
"jest": "^27.0.6",
"lerna": "^3.22.0",
"lerna-changelog": "^1.0.1",
"lint-staged": "^10.5.4",
Expand Down
19 changes: 19 additions & 0 deletions packages/@vue/cli-plugin-unit-jest/__tests__/jestPlugin.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,5 +137,24 @@ test('should work with Vue 3', async () => {
})
const pkg = JSON.parse(await project.read('package.json'))
expect(pkg.devDependencies['@vue/test-utils']).toMatch('^2')
expect(pkg.devDependencies['vue3-jest']).toMatch('^27')
expect(pkg.devDependencies.jest).toMatch('^27')
expect(pkg.devDependencies['babel-jest']).toMatch('^27')
await project.run(`vue-cli-service test:unit`)
})

test('should work with Vue 3 and TS', async () => {
const project = await createOutside('unit-jest-vue-3', {
vueVersion: '3',
plugins: {
'@vue/cli-plugin-typescript': {},
'@vue/cli-plugin-unit-jest': {}
}
})
const pkg = JSON.parse(await project.read('package.json'))
expect(pkg.devDependencies['@vue/test-utils']).toMatch('^2')
expect(pkg.devDependencies['vue3-jest']).toMatch('^27')
expect(pkg.devDependencies.jest).toMatch('^27')
expect(pkg.devDependencies['ts-jest']).toMatch('^27')
await project.run(`vue-cli-service test:unit`)
})
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,24 @@ test('should work with Vue 3', async () => {
})
const pkg = JSON.parse(await project.read('package.json'))
expect(pkg.devDependencies['@vue/test-utils']).toMatch('^2')
expect(pkg.devDependencies['vue3-jest']).toMatch('^27')
expect(pkg.devDependencies.jest).toMatch('^27')
expect(pkg.devDependencies['babel-jest']).toMatch('^27')
await project.run(`vue-cli-service test:unit`)
})

test('should work with Vue 3 and TS', async () => {
const project = await createOutside('unit-jest-vue-3', {
vueVersion: '3',
plugins: {
'@vue/cli-plugin-typescript': {},
'@vue/cli-plugin-unit-jest': {}
}
})
const pkg = JSON.parse(await project.read('package.json'))
expect(pkg.devDependencies['@vue/test-utils']).toMatch('^2')
expect(pkg.devDependencies['vue3-jest']).toMatch('^27')
expect(pkg.devDependencies.jest).toMatch('^27')
expect(pkg.devDependencies['ts-jest']).toMatch('^27')
await project.run(`vue-cli-service test:unit`)
})
7 changes: 5 additions & 2 deletions packages/@vue/cli-plugin-unit-jest/generator/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ module.exports = (api, options, rootOptions, invoking) => {
'test:unit': 'vue-cli-service test:unit'
},
devDependencies: {
'vue-jest': isVue3 ? '^5.0.0-0' : '^4.0.1',
'babel-jest': '^27.0.6',
'jest': '^27.0.5',
'@vue/vue2-jest': isVue3 ? undefined : '^27.0.0-alpha.1',
'vue3-jest': isVue3 ? '^27.0.0-alpha.2' : undefined,
'@vue/test-utils': isVue3 ? '^2.0.0-0' : '^1.1.3'
},
jest: {
Expand Down Expand Up @@ -58,7 +61,7 @@ const applyTS = (module.exports.applyTS = (api, invoking) => {
},
devDependencies: {
'@types/jest': '^26.0.20',
'ts-jest': '^26.5.3'
'ts-jest': '^27.0.4'
}
})

Expand Down
7 changes: 4 additions & 3 deletions packages/@vue/cli-plugin-unit-jest/migrator/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ module.exports = (api) => {

if (!allDeps['vue-jest']) {
// Likely a Vue 2 project, and uses the builtin preset.
// Because we used to add `vue-jest` v5 to dev deps for Vue 3 projects.
newDevDeps['vue-jest'] = '^4.0.1'
newDevDeps.jest = '^27.0.6'
// Because we used to add `vue3-jest` v27 to dev deps for Vue 3 projects.
newDevDeps['vue3-jest'] = '^27.0.0.alpha.2'
}

if (allDeps['@vue/cli-plugin-typescript'] && !allDeps['ts-jest']) {
newDevDeps['ts-jest'] = '^26.5.3'
newDevDeps['ts-jest'] = '^27.0.4'
}

const toMerge = { devDependencies: newDevDeps }
Expand Down
22 changes: 15 additions & 7 deletions packages/@vue/cli-plugin-unit-jest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,37 @@
},
"dependencies": {
"@babel/core": "^7.12.16",
"@babel/plugin-transform-modules-commonjs": "^7.12.13",
"@babel/plugin-transform-modules-commonjs": "^7.15.0",
"@types/jest": "^26.0.20",
"@vue/cli-shared-utils": "^5.0.0-beta.2",
"babel-jest": "^26.6.3",
"babel-jest": "^27.0.6",
"deepmerge": "^4.2.2",
"jest": "^26.6.3",
"jest-serializer-vue": "^2.0.2",
"jest-transform-stub": "^2.0.0",
"jest-watch-typeahead": "^0.6.1"
},
"devDependencies": {
"@vue/test-utils": "^1.1.3",
"ts-jest": "^26.5.3",
"vue-jest": "^4.0.1"
"@vue/vue2-jest": "^27.0.0-alpha.1",
"ts-jest": "^27.0.4",
"vue3-jest": "^27.0.0-alpha.2"
},
"peerDependencies": {
"@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0",
"ts-jest": "^26.5.3",
"vue-jest": "^4.0.1 || ^5.0.0-0"
"jest": "^27.6.3",
"ts-jest": "^27.0.4",
"@vue/vue2-jest": "^27.0.0-alpha.1",
"vue3-jest": "^27.0.0-alpha.2"
},
"peerDependenciesMeta": {
"@vue/vue2-jest": {
"optional": true
},
"ts-jest": {
"optional": true
},
"vue3-jest": {
"optional": true
}
}
}
27 changes: 23 additions & 4 deletions packages/@vue/cli-plugin-unit-jest/presets/default/jest-preset.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
let vueJest = null
// eslint-disable-next-line node/no-extraneous-require
const semver = require('semver')

let vueVersion = 2
try {
vueJest = require.resolve('vue-jest')
} catch (e) {
throw new Error('Cannot resolve "vue-jest" module. Please make sure you have installed "vue-jest" as a dev dependency.')
// eslint-disable-next-line node/no-extraneous-require
const Vue = require('vue')
vueVersion = semver.major(Vue.version)
} catch (e) {}

let vueJest = null
if (vueVersion === 2) {
try {
vueJest = require.resolve('@vue/vue2-jest')
} catch (e) {
throw new Error('Cannot resolve "@vue/vue2-jest" module. Please make sure you have installed "@vue/vue2-jest" as a dev dependency.')
}
} else if (vueVersion === 3) {
try {
vueJest = require.resolve('vue3-jest')
} catch (e) {
throw new Error('Cannot resolve "vue3-jest" module. Please make sure you have installed "vue3-jest" as a dev dependency.')
}
}

module.exports = {
testEnvironment: 'jsdom',
moduleFileExtensions: [
'js',
'jsx',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const babelJest = require('babel-jest')
const babelJest = require('babel-jest').default

module.exports = babelJest.createTransformer({
plugins: ['@babel/plugin-transform-modules-commonjs'],
Expand Down

0 comments on commit 6d59435

Please sign in to comment.