从npm运行时,为什么从Jest获得0的覆盖率?

时间:2019-03-24 07:31:58

标签: unit-testing npm jestjs

我正在尝试使用Jest获取单个Vue组件的代码覆盖率编号。

假设我的组件是/var/www/html/path/to/Component.vue,其相应的单元测试文件是/var/www/html/path/to/tests/unit/Component.spec.js

在我的package.json中,我有以下脚本:

"scripts": {
    "test": "jest --no-cache"
}

当我运行Jest以仅覆盖我的组件时,就像这样:

npm test -- "/var/www/html/path/to/tests/unit/Component.spec.js" "--coverage" "--collectCoverageFrom=/var/www/html/path/to/Component.vue"

我得到零代码覆盖率数字:

=============================== Coverage summary ===============================
Statements   : Unknown% ( 0/0 )
Branches     : Unknown% ( 0/0 )
Functions    : Unknown% ( 0/0 )
Lines        : Unknown% ( 0/0 )
================================================================================
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        4.019s

为什么会得到此结果,如何通过npm从Jest获取真实的代码覆盖率统计信息?

2 个答案:

答案 0 :(得分:0)

我已经找到了问题和解决方法。

在我的package.json中,我有Jest配置,其中包括:

 "jest": {
    "rootDir": "./",
 }

这意味着Jest的根目录是我的npm项目目录。在我的人为示例中,这是/var/www/html/path

为了获得正确的coverage值,我从使用绝对路径切换到相对于上述根目录的路径。所以现在对我有用的是:

npm test -- "to/tests/unit/Component.spec.js" "--coverage" "--collectCoverageFrom=/var/to/Component.vue"

奇怪的是,collectCoverageFrom不尊重我项目中的绝对路径。

答案 1 :(得分:0)

在使用 --config= option 运行 jest 时,我也遇到了 0% 覆盖率的问题。问题是 jest 假定 configPath 是根目录,因此找不到任何文件来检查覆盖范围。

我的解决方案只是在目录树中进入更高的位置:

{
  "rootDir": "../.",
  ...
}

在目录中调整您上级的步骤(如"../../.")或将配置文件放在您的根目录中。