首页 > 解决方案 > 如何使用 react-create-app 获取代码覆盖率报告?

问题描述

如果我跑

npm test --coverage

测试通过,但覆盖率未运行。

当我改变package.json

react-scripts test --coverage

然后,当我这样做npm test并且a它运行测试而不是覆盖范围时

测试与覆盖率报告一起运行,但覆盖率显示覆盖率全为零

 PASS  src/components/Header/SubHeader.test.js
  The <SubHeader /> component
    ✓ should render (4ms)
    ✓ should render with a goback button (1ms)
    ✓ should render

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |        0 |        0 |        0 |        0 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   3 passed, 3 total
Time:        1.077s
Ran all test suites.

终于,我意识到我可以做到

npm run test .

问题:为什么其他方法不起作用?

标签: reactjsnpmjestjs

解决方案


重新审视这个问题后,我发现如果你运行它,你将触发覆盖命令并获得所有结果。

解决方案 1

npm run test -- --coverage .

当您将参数传递给npm脚本时,您需要--在添加参数之前添加--coverage. 这就是npm工作原理。请参阅此答案以将参数传递给 npm

解决方案 2

yarn test --coverage .

编辑:

我问了一个关于.传递命令的问题,答案非常简单。.被传递是因为它是一个位置参数,与命令--coverage的选项相反npm testWhy is . 作为参数传递给没有 -- 分隔符的 npm?

---- 问题分析 ----

问题 1

npm test --coverage您没有将--coverage参数传递给test脚本。

在另一种情况下,当您将脚本编辑为:

react-scripts test --coverage并在npm test这里运行您实际上添加了参数--coverage,但在脚本本身中,而不是来自npm命令

问题 2

当你npm run test .传递时.,这意味着你想在这个命令中包含所有文件。

由于某种原因.被传递给npm run test脚本但不是--coverage.

另一方面,yarn传递所有参数而不传递--.


推荐阅读