我很难用Jest设置Vue CLI 3来显示测试范围。我已经竭尽所能使它正常工作,但仍然没有涵盖:
Ran all test suites.
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 0 | 0 | 0 | 0 | |
----------|----------|----------|----------|----------|-------------------|
=============================== Coverage summary ===============================
Statements : Unknown% ( 0/0 )
Branches : Unknown% ( 0/0 )
Functions : Unknown% ( 0/0 )
Lines : Unknown% ( 0/0 )
以下是我的配置摘录:
jest.config.js:
module.exports = {
moduleFileExtensions: [
'js',
'jsx',
'json',
'vue'
],
transform: {
'^.+\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
'^.+\\.jsx?$': 'babel-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
snapshotSerializers: [
'jest-serializer-vue'
],
testMatch: [
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
transformIgnorePatterns: ['<rootDir>/node_modules/'],
testURL: 'http://localhost/'
}
package.json:
....
"scripts": {
"test:unit": "nyc vue-cli-service test:unit"
},
"nyc": {
"check-coverage": true,
"per-file": true,
"lines": 90,
"statements": 90,
"functions": 90,
"branches": 90,
"include": [
"src/**/*.{js,vue}"
],
"exclude": [
"src/*.js"
],
"reporter": [
"lcov",
"text",
"text-summary"
],
"extension": [
".js",
".vue"
],
"verbose": true,
"cache": true,
"all": true
}
如何正确配置Vue CLI 3和Jest以显示测试覆盖率?
答案 0 :(得分:8)
Jest具有自己的覆盖范围,因此请从 package.json中删除nyc
:
"scripts": {
// "test:unit": "nyc vue-cli-service test:unit" // DELETE
"test:unit": "vue-cli-service test:unit"
},
// "nyc": {...} // DELETE
要启用Jest的覆盖范围,请在 jest.config.js 中设置collectCoverage
和collectCoverageFrom
(按vue-test-utils
docs):
collectCoverage: true,
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js', // No need to cover bootstrap file
],
运行yarn test:unit
应该会产生如下控制台输出:
还请注意,Jest控制台输出仅列出包含可执行JavaScript的文件(对于Vue SFC,methods
)。如果您要使用默认的Vue CLI生成的模板,则HelloWorld.vue
不包含methods
,因此不会列出。在上面的屏幕截图中,我向HelloWorld.vue
添加了一个未使用的方法来演示Jest的未发现行报告。
答案 1 :(得分:2)
尽管@ tony19的答案是完全正确的,但您不一定需要在自定义的jest配置中添加任何内容。对于使用Vue CLI服务构建的项目,只需在package.json
中添加以下脚本即可正常工作,并且显示了Vue组件的覆盖范围:
test:coverage": "vue-cli-service test:unit --coverage",
您可以添加其他选项,例如更改报告程序,并为此脚本具有不同的玩笑配置。要获取选项的完整列表,可以在终端中运行以下命令:
npx vue-cli-service test:unit help
在这些选项中,您会发现collectCoverage
和collectCoverageFrom
可以帮助您将所有内容保留在脚本中,而不是拥有自定义配置文件。
答案 2 :(得分:0)
如果您不使用Vue CLI插件@vue/cli-plugin-unit-jest
,则仍可以为Vue组件生成测试覆盖率报告。您可以按照以下方式配置Jest:
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'json', 'vue'],
transform: {
'^.+\\.js$': 'babel-jest',
'^.+\\.vue$': 'vue-jest'
},
collectCoverage: true,
collectCoverageFrom: ['src/**/*.{js,vue}', '!src/main.js']
}
然后,您只需运行npx jest
即可生成覆盖率报告。
覆盖率报告如下所示: