我正在尝试为我的 API 创建一个单元测试,但开 Jest ,我没有获得 100% 的覆盖率。我已经创建了我能想到的所有可能的测试,但覆盖率报告仍然说我没有测试所有语句、分支和行。有人能帮我吗?这发生在第 28、29、32 和 33 行
最佳答案
根据我的计算,要完全覆盖execute
函数,至少需要这5个测试:
- 当
this.classRepository.getAll()
解析为空数组时 - 当
this.classRepository.getAll()
解析为一项时,- 当
this.commentsRepository.getLastCommentForClass()
解析为评论时 - 当
this.commentsRepository.getLastCommentForClass()
解析时没有评论 - 当
this.commentsRepository.getLastCommentForClass()
拒绝时
- 当
- 当
this.classRepository.getAll()
拒绝时
作为一项健全性检查,我还会尝试检查 this.classRepository.getAll()
何时解析多个项目,因为如果内部至少有一个 Promise 被拒绝,则 Promise.all 会拒绝。如果有两个项目,则将进行 9 次测试,而不是 3 次,因此最好单独覆盖 map 功能并在这里像黑盒一样使用。
下一个健全性检查将是用意想不到的数据来解决你的 promise 。这很重要,因为这里没有任何错误处理,即使您使用 .catch
处理外部错误,最好提供适当的拒绝(例如,对意外的内容有错误,对意外的内容有错误)预期的东西)。
现在,我解释一下我是如何计算的。
我画了一个你的函数的模型,并计算了有多少条路径。我排除了我认为不重要的路径(例如 map 函数中的重复),并最终得到了这个测试。这是模型:
关于javascript - Jest 中的覆盖范围不包括分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66622204/