【发布时间】:2019-04-28 08:23:15
【问题描述】:
我有一个使用create-react-app 创建的应用程序和一些用 Jest + Istanbul 编写的 UI 测试。
我想获得这些 UI 测试的代码覆盖率。我喜欢继续使用 jest,因为我已经将它用于单元测试。
如果可能的话,我不想弹出create-react-app。但如果没有其他选择,我愿意接受。
到目前为止我所做的尝试:
在package.json
"scripts": {
"uitest": "react-scripts test --env=jsdom --verbose --testMatch='**/*.ui-test.{js}'",
}
如果我运行npm run uitest -- --coverage
^ 我认为在上面的场景中它只捕获测试而不是实际的应用程序。
我该如何解决这个问题?
其他失败的尝试:
1) How to cover React jsx files in Istanbul? - 不要申请,因为我正在使用create-react-app
2) https://github.com/facebook/create-react-app/issues/3257 - 显然这个功能被建议但被拒绝了。
3) https://github.com/istanbuljs/puppeteer-to-istanbul/issues/18 - 有一个名为 puppeteer-to-istanbul 的库,但它不支持源映射。 (问题见链接)
4) 我还查看了关于 safaribooks 的 Node.js Web 开发 - 第四版 一书 - 我找到了 Puppeteer 的有用指南,但它似乎没有涵盖代码覆盖率。
5) Hands-On Continuous Integration and Delivery on safaribooks - 有一个关于 Puppeteer + Jest 测试的部分,没有提及代码覆盖率。
6) 我试过puppeteer-to-istanbul -> 我们可以通过这种方式计算包的代码覆盖率,它不支持源映射。
7) 尝试了 Enselic 的建议,但未能成功。尝试推送babel-plugin-istanbul 时,它似乎在自定义预设内的push 方法上崩溃。
【问题讨论】:
-
嗨,我是提交github.com/facebook/create-react-app/issues/3257 的人。仅供参考,我最终做了一个“部分弹出”,即只弹出 build.js 和依赖项(请参阅github.com/Enselic/sequencediagram.io/commit/…)然后您可以添加自己的预设以增加代码覆盖率(请参阅github.com/Enselic/sequencediagram.io/blob/master/config/…),同时仍然保留其他反应的好处-脚本部分而不会使您的存储库膨胀。
-
@Enselic 好的,谢谢,我会尝试这种方法。只是好奇你做了什么来部分弹出,复制新东西,并使用 git 恢复,复制必要的东西回来?。顺便说一句,这也是一些不错的软件(已加星标)。
-
是的,完全正确:为了部分弹出,我做了一个完整的、正常的弹出,然后手动撤消了我不想弹出的内容。很高兴听到你喜欢我的项目,并感谢你的星星 :)
-
最后我决定专注于编写更多的单元测试。我也尝试了@Enselic 的建议,但我无法让它发挥作用。 :) 我会保留这个问题,看看是否有人有更多想法。一旦允许赏金,我也会尝试。
标签: reactjs jestjs create-react-app puppeteer istanbul