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

uri*_*rig 7 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"
}
Run Code Online (Sandbox Code Playgroud)

当我运行 Jest 以仅覆盖我的组件时,如下所示:

"scripts": {
    "test": "jest --no-cache"
}
Run Code Online (Sandbox Code Playgroud)

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

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

为什么我会得到这个结果,我怎样才能通过 npm 从 Jest 获得真实的代码覆盖率统计数据

uri*_*rig 5

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

在我的package.jsonJest 配置中,它包括:

 "jest": {
    "rootDir": "./",
 }
Run Code Online (Sandbox Code Playgroud)

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

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

npm test -- "to/tests/unit/Component.spec.js" "--coverage" "--collectCoverageFrom=/var/to/Component.vue"
Run Code Online (Sandbox Code Playgroud)

collectCoverageFrom在我的项目中不尊重绝对路径仍然很奇怪。