如何在反应测试库中获得代码覆盖率

Mah*_*esh 13 reactjs react-testing-library

我已经使用 react 测试库(@testing-library/react & @testing-library/dom)和 jest-dom(@testing-library/jest-dom)编写了单元测试。我能够成功运行我的测试。

我没有使用 jest/jest-cli complete pacakge。我正在使用反应测试库和那个 jest-dom(@testing-library/jest-dom) 它可能是一些子包或我不确定到底该叫它什么的东西。

如何使用反应测试库获得代码覆盖率?

在此处输入图片说明

gug*_*gol 15

好吧,create-react-app为您提供了很多开箱即用的功能,但它也施加了一些限制......

您不能仅仅添加标志--coveragenpm run test因为该脚本已经在监视模式下运行您的测试(并且诸如仅运行失败的测试以及您可以在交互模式下执行的其他操作无论如何都会影响您的覆盖率报告)。

所以首先,在单次运行模式下运行你的测试。

CI=true react-scripts test --env=jsdom
Run Code Online (Sandbox Code Playgroud)

并且因为您的 package.json 中已经有一个测试任务,所以您可以将您的任务简化为:

CI=true npm test -- --env=jsdom
Run Code Online (Sandbox Code Playgroud)

好吧,我们越来越近了……所以现在,在此之上添加--coverage标志,您就完成了:

CI=true npm test -- --env=jsdom --coverage
Run Code Online (Sandbox Code Playgroud)

总结一下你的 npm 任务可能是这样的:

"test:coverage": "CI=true npm test -- --env=jsdom --coverage"
Run Code Online (Sandbox Code Playgroud)

您将在终端中看到您的报告并coverage生成文件夹,顺便说一下,您可以在其中看到很多有用的信息!

  • 要使答案环境独立,您还可以使用“cross-env”npm 包:“cross-env CI=true npm test -- --env=jsdom --coverage”。否则,它在 Windows 上需要不同的语法。 (3认同)
  • 有人可以解释一下语法 `CI=true` => 这设置了一个环境变量,`CI=true npm test` 这是做什么的?我认为这会是类似“CI=true && npm test”的东西。另外`<space>--</space>`是什么意思? (2认同)

小智 9

由于react-scripts已合并jest配置,您只需输入 npm run test --coverageyarn test --coverage, 即可生成覆盖率报告。


Dav*_*ter 8

这个问题的实际答案是存在的:npm test -- --coverage never exits

RTL 不提供测试覆盖率统计信息,但如果您将以下内容添加到 Jest 中,Jest 就会提供package.json

"test:coverage": "react-scripts test --env=jsdom --watchAll=false --coverage"

然后你可以运行:

npm run test:coverage

有关更多详细信息,请参阅我上面链接的答案或上面 Watchmaker 的答案。