首页 > 解决方案 > 为什么从 npm 运行 Jest 时,我的覆盖率为 0?

问题描述

我正在尝试使用 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 获得真实的代码覆盖率统计信息

标签: unit-testingnpmjestjs

解决方案


我发现了问题和解决方法。

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

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

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

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

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

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


推荐阅读