Skip to content

Commit bb5d968

Browse files
committed
feat: WIP jest plugin
1 parent 52dad9d commit bb5d968

File tree

14 files changed

+459
-737
lines changed

14 files changed

+459
-737
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ yarn test -g <filenameRegex>
4747

4848
You can also pass `--watch` to run tests in watch mode.
4949

50-
Note that `jest -o` (running tests related to modified files) isn't always accurate because some tests spawn child processes.
50+
Note that `jest --onlyChanged` isn't always accurate because some tests spawn child processes.
5151

5252
### Plugin Development
5353

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"lint-staged": "^6.0.0",
5252
"memfs": "^2.6.0",
5353
"puppeteer": "^0.13.0",
54-
"yorkie": "^1.0.2"
54+
"yorkie": "^1.0.2",
55+
"babel-core": "^7.0.0-0"
5556
}
5657
}

packages/@vue/babel-preset-app/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = (context, options = {}) => {
77
// JSX
88
if (options.jsx !== false) {
99
plugins.push(
10-
require('@babel/plugin-syntax-jsx').default,
10+
require('@babel/plugin-syntax-jsx'),
1111
require('babel-plugin-transform-vue-jsx'),
1212
require('babel-plugin-jsx-event-modifiers'),
1313
require('babel-plugin-jsx-v-model')
@@ -26,15 +26,15 @@ module.exports = (context, options = {}) => {
2626
}
2727
// cli-plugin-jest sets this to true because Jest runs without bundling
2828
if (process.env.VUE_CLI_BABEL_TRANSPILE_MODULES) {
29-
envOptions.modules = true
29+
envOptions.modules = 'commonjs'
3030
}
3131

3232
// pass options along to babel-preset-env
33-
presets.push([require('@babel/preset-env').default, envOptions])
33+
presets.push([require('@babel/preset-env'), envOptions])
3434

3535
// stage 2. This includes some important transforms, e.g. dynamic import
3636
// and rest object spread.
37-
presets.push([require('@babel/preset-stage-2').default, {
37+
presets.push([require('@babel/preset-stage-2'), {
3838
useBuiltIns: true
3939
}])
4040

packages/@vue/babel-preset-app/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
},
2222
"homepage": "https://github.com/vuejs/vue-cli/packages/@vue/babel-preset-app#readme",
2323
"dependencies": {
24-
"@babel/plugin-syntax-jsx": "7 || ^7.0.0-beta || ^7.0.0-rc",
25-
"@babel/plugin-transform-runtime": "7 || ^7.0.0-beta || ^7.0.0-rc",
26-
"@babel/preset-env": "7 || ^7.0.0-beta || ^7.0.0-rc",
27-
"@babel/preset-stage-2": "7 || ^7.0.0-beta || ^7.0.0-rc",
28-
"@babel/runtime": "7 || ^7.0.0-beta || ^7.0.0-rc",
24+
"@babel/plugin-syntax-jsx": "^7.0.0-0",
25+
"@babel/plugin-transform-runtime": "^7.0.0-0",
26+
"@babel/preset-env": "^7.0.0-0",
27+
"@babel/preset-stage-2": "^7.0.0-0",
28+
"@babel/runtime": "^7.0.0-0",
2929
"babel-helper-vue-jsx-merge-props": "^2.0.3",
3030
"babel-plugin-jsx-event-modifiers": "^2.0.5",
3131
"babel-plugin-jsx-v-model": "^2.0.3",

packages/@vue/cli-plugin-babel/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
},
2020
"homepage": "https://github.com/vuejs/vue-cli/packages/@vue/cli-plugin-babel#readme",
2121
"dependencies": {
22-
"@babel/core": "7 || ^7.0.0-beta || ^7.0.0-rc",
23-
"babel-loader": "8 || ^8.0.0-beta || ^8.0.0-rc"
22+
"@babel/core": "^7.0.0-0",
23+
"babel-loader": "^7.1.2"
2424
},
2525
"publishConfig": {
2626
"access": "public"

packages/@vue/cli-plugin-unit-jest/generator/index.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,49 @@ module.exports = api => {
99
}
1010
})
1111

12+
const jestConfig = {
13+
'moduleFileExtensions': [
14+
'json',
15+
// tell Jest to handle *.vue files
16+
'vue'
17+
],
18+
'transform': {
19+
// process *.vue files with vue-jest
20+
'^.+\\.vue$': 'vue-jest'
21+
},
22+
// support the same @ -> src alias mapping in source code
23+
'moduleNameMapper': {
24+
'^@/(.*)$': '<rootDir>/src/$1'
25+
},
26+
// serializer for snapshots
27+
'snapshotSerializers': [
28+
'jest-serializer-vue'
29+
],
30+
'mapCoverage': true
31+
}
32+
33+
if (!api.hasPlugin('typescript')) {
34+
jestConfig.moduleFileExtensions.unshift('js', 'jsx')
35+
jestConfig.transform['^.+\\.jsx?$'] = 'babel-jest'
36+
api.extendPackage({
37+
devDependencies: {
38+
'babel-jest': '^22.0.4',
39+
// this is for now necessary to force babel-jest and vue-jest to use babel 7
40+
'babel-core': '^7.0.0-0'
41+
}
42+
})
43+
} else {
44+
jestConfig.moduleFileExtensions.unshift('ts', 'tsx')
45+
jestConfig.transform['^.+\\.tsx?$'] = 'ts-jest'
46+
api.extendPackage({
47+
devDependencies: {
48+
'ts-jest': '^22.0.1'
49+
}
50+
})
51+
}
52+
53+
api.extendPackage({ jest: jestConfig })
54+
1255
if (api.hasPlugin('eslint')) {
1356
api.render(files => {
1457
files['test/unit/.eslintrc'] = JSON.stringify({
Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
11
module.exports = api => {
22
api.registerCommand('test', {
3-
description: 'run unit tests with jest'
4-
}, args => {
3+
description: 'run unit tests with jest',
4+
usage: 'vue-cli-service test [options] <regexForTestFiles>',
5+
options: {
6+
'--watch': 'run tests in watch mode'
7+
},
8+
details:
9+
`All jest command line options are supported.\n` +
10+
`See https://facebook.github.io/jest/docs/en/cli.html for more details.`
11+
}, (args, rawArgv) => {
512
api.setMode('test')
613
// for @vue/babel-preset-app
714
process.env.VUE_CLI_BABEL_TARGET_NODE = true
815
process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = true
916

1017
// TODO execa jest w/ --config jest.config.js
18+
const execa = require('execa')
19+
const jestBinPath = require.resolve('jest/bin/jest')
20+
21+
return new Promise((resolve, reject) => {
22+
const child = execa(jestBinPath, rawArgv, { stdio: 'inherit' })
23+
child.on('error', reject)
24+
child.on('exit', code => {
25+
if (code !== 0) {
26+
reject(`jest exited with code ${code}.`)
27+
} else {
28+
resolve()
29+
}
30+
})
31+
})
1132
})
1233
}

packages/@vue/cli-plugin-unit-jest/jest.config.js

Lines changed: 0 additions & 26 deletions
This file was deleted.

packages/@vue/cli-plugin-unit-jest/package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@
2222
"access": "public"
2323
},
2424
"dependencies": {
25-
"babel-jest": "^22.0.4",
26-
"execa": "^0.8.0",
27-
"jest": "^22.0.5",
25+
"execa": "^0.9.0",
26+
"jest": "^22.1.1",
2827
"jest-serializer-vue": "^0.3.0",
29-
"vue-jest": "^1.4.0"
28+
"vue-jest": "yyx990803/vue-jest"
3029
},
3130
"devDependencies": {
32-
"@vue/test-utils": "^1.0.0-beta.10"
31+
"@vue/test-utils": "^1.0.0-beta.10",
32+
"babel-jest": "^22.0.4",
33+
"ts-jest": "^22.0.1"
3334
}
3435
}

packages/@vue/cli-plugin-unit-mocha/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
},
2222
"homepage": "https://github.com/vuejs/vue-cli/packages/@vue/cli-plugin-unit-mocha#readme",
2323
"dependencies": {
24-
"execa": "^0.8.0",
24+
"execa": "^0.9.0",
2525
"jsdom": "^11.5.1",
2626
"jsdom-global": "^3.0.2",
2727
"mocha": "^4.1.0",

0 commit comments

Comments
 (0)