如何使用jest使测试覆盖率显示Vue-cli 3中的所有vue文件

dev*_*vIT 7 vue.js jestjs vuejs2 nyc vue-cli-3

我很难用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 )
Run Code Online (Sandbox Code Playgroud)

以下是我的配置摘录:

jest.config.js:

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 )
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

如何正确配置Vue CLI 3和Jest以显示测试覆盖率?

ton*_*y19 13

Jest有自己的覆盖工具,因此请nycpackage.json中删除

"scripts": {
  // "test:unit": "nyc vue-cli-service test:unit" // DELETE
  "test:unit": "vue-cli-service test:unit"
},
// "nyc": {...} // DELETE
Run Code Online (Sandbox Code Playgroud)

要启用Jest的覆盖范围,请设置collectCoveragecollectCoverageFromjest.config.js中(根据vue-test-utilsdocs):

collectCoverage: true,
collectCoverageFrom: [
  'src/**/*.{js,vue}',
  '!src/main.js', // No need to cover bootstrap file
],
Run Code Online (Sandbox Code Playgroud)

运行yarn test:unit应该产生控制台输出,如下所示:

控制台屏幕截图

GitHub演示

还请注意,Jest控制台输出仅列出包含可执行JavaScript的文件(methods适用于Vue SFC)。如果您要处理的是默认的Vue CLI生成的模板,HelloWorld.vue其中包含no methods,那么它将不会列出。在上面的屏幕截图中,我添加了一个未使用的方法HelloWorld.vue来演示Jest的未发现行报告。


Jal*_*ayn 11

虽然@tony19 的回答完全有效,但您不一定需要在自定义笑话配置中添加任何内容。对于使用 Vue CLI 服务构建的项目,只需在package.json工作正常中添加以下脚本,即可显示 Vue 组件的覆盖范围:

"test:coverage": "vue-cli-service test:unit --coverage",
Run Code Online (Sandbox Code Playgroud)

您还可以添加其他选项,例如更改报告器,以及为该脚本设置独特的 Jest 配置。要获取完整的选项列表,您可以在终端中运行以下命令:

 npx vue-cli-service test:unit help
Run Code Online (Sandbox Code Playgroud)

而且,在这些选项中,您会发现collectCoveragecollectCoverageFrom可以帮助您将所有内容保留在脚本中,而不是拥有自定义配置文件。

  • 事实上,解决这个问题的另一种方法是通过 `test:unit` 使用 Jest CLI :) 如果使用 Vue CLI 生成带有 `@vue/unit-jest` 的项目,该项目将已经在 ` jest.config.js`(如果启用了 `useConfigFiles`),或者在 `package.json` 的 `jest` 属性中。我认为将所有 Jest 配置保存在同一位置而不是在 `npm` 脚本中将其中的一个/一些分开会更干净。 (4认同)

Yuc*_*uci 9

如果您不使用 Vue CLI 插件@vue/cli-plugin-unit-jest,您仍然可以生成 Vue 组件的测试覆盖率报告。您可以按如下方式配置 Jest:

笑话配置.js

module.exports = {
  moduleFileExtensions: ['js', 'json', 'vue'],
  transform: {
    '^.+\\.js$': 'babel-jest',
    '^.+\\.vue$': 'vue-jest'
  },
  collectCoverage: true,
  collectCoverageFrom: ['src/**/*.{js,vue}', '!src/main.js']
}
Run Code Online (Sandbox Code Playgroud)

然后您只需运行即可生成覆盖率报告npx jest

覆盖率报告如下所示:

(1) 航站楼 在此输入图像描述

(2) HTML 在此输入图像描述