如何使用react-create-app获取代码覆盖率报告?

Mic*_*ant 21 npm reactjs jestjs

如果我跑

\n
npm test --coverage\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

当我改变时package.json拥有

\n
react-scripts test --coverage\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
 PASS  src/components/Header/SubHeader.test.js\n  The <SubHeader /> component\n    \xe2\x9c\x93 should render (4ms)\n    \xe2\x9c\x93 should render with a goback button (1ms)\n    \xe2\x9c\x93 should render\n\n----------|----------|----------|----------|----------|-------------------|\nFile      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |\n----------|----------|----------|----------|----------|-------------------|\nAll files |        0 |        0 |        0 |        0 |                   |\n----------|----------|----------|----------|----------|-------------------|\nTest Suites: 1 passed, 1 total\nTests:       3 passed, 3 total\nSnapshots:   3 passed, 3 total\nTime:        1.077s\nRan all test suites.\n
Run Code Online (Sandbox Code Playgroud)\n

最后,我意识到我可以做到

\n
npm run test .\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Mar*_*vic 21

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

解决方案1

npm run test -- --coverage .
Run Code Online (Sandbox Code Playgroud)

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

解决方案2

yarn test --coverage .
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

问题1

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

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

react-scripts test --coveragenpm test在此处运行,您实际上添加了参数--coverage,但在脚本本身中,而不是从npm命令中添加

问题2

当您这样做时npm run test .,您将传递.这意味着您希望在此命令中包含所有文件。

由于某种原因.传递给npm run test脚本但没有传递--coverage

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