【发布时间】:2021-03-15 12:36:01
【问题描述】:
我正在尝试为我的 API 创建一个单元测试,但我没有得到 100% 的覆盖率。我已经创建了我能想到的所有可能的测试,但覆盖率报告仍然说我没有测试所有的语句、分支和行。有人能帮我吗?这发生在第 28、29、32 和 33 行
【问题讨论】:
标签: javascript node.js jestjs
我正在尝试为我的 API 创建一个单元测试,但我没有得到 100% 的覆盖率。我已经创建了我能想到的所有可能的测试,但覆盖率报告仍然说我没有测试所有的语句、分支和行。有人能帮我吗?这发生在第 28、29、32 和 33 行
【问题讨论】:
标签: javascript node.js jestjs
根据我的计算,要完全覆盖execute函数,你至少需要这5个测试:
this.classRepository.getAll() 解析为空数组时this.classRepository.getAll() 解析为一项时,
this.commentsRepository.getLastCommentForClass() 用评论解析时this.commentsRepository.getLastCommentForClass() 在没有注释的情况下解析时this.commentsRepository.getLastCommentForClass() 拒绝时this.classRepository.getAll() 拒绝时作为健全性检查,我还会尝试检查 this.classRepository.getAll() 何时解决多个项目,因为 Promise.all 如果内部至少有一个承诺拒绝,则拒绝。如果是两个项目,它将进行 9 次测试而不是 3 次,因此最好单独覆盖地图功能并在此处像黑匣子一样使用。
下一个健全性检查将是使用意外数据来解决您的承诺。这很重要,因为您在这里没有任何错误处理,即使您使用.catch 处理外部错误,最好提供适当的拒绝(例如,对意外的东西有错误,对预期的东西有错误)。
现在,我解释一下我是如何计算的。
我为你的函数绘制了一个模型,并计算了有多少条路径。我排除了我认为不重要的路径(例如地图功能中的重复),最后得到了这个测试。这是模型:
【讨论】: