else 单元测试中未采用的路径
Posted
技术标签:
【中文标题】else 单元测试中未采用的路径【英文标题】:else path not taken in unit testing 【发布时间】:2020-03-11 14:50:04 【问题描述】:我正在研究 Angular 6
我的以下代码中没有任何 else 语句。但由于未采用 else 路径,我无法覆盖分支。在这种情况下,我需要做什么才能获得 100% 的分支覆盖率?
getHeaderDocumentList(documents: any)
if (documents)
documents.result.docAttachment.forEach(element =>
this.headerdocumentdetails.push(element.DocumentUniqueID);
);
【问题讨论】:
您是否尝试将评估为 false 的输入传递给 if 语句并绕过它? 【参考方案1】:为了报告完整的覆盖率,代码需要最终到达(此处不明确存在的)else
-path。就此而言,传入falsy
参数,如0 | false | undefined | null | NaN | '' | "" | ``
,如
component.getHeaderDocumentList(false);
expect(false).toEqual(false); // This line is optional. Most test suites require some kind of assertion in each test.
现在您的测试套件应该报告两个分支都已覆盖。
最后的解决方案是在 if 案例之前添加
/* istanbul ignore else */
。这将告诉记者有效地忽略 else 路径
【讨论】:
好主意!但在某些情况下,我无法解决此问题。任何方式到现在 80% 就足够了。还有一个问题:你听说过sourceMap:true 嗯,这很奇怪。一旦你再次运行测试,它应该停止抱怨。 最后的解决方案是在 if 案例之前添加/* istanbul ignore else */
。这将告诉记者有效地忽略 else 路径。
如果一个假/空文档列表的预期输出是headerdocumentdetails
没有改变,那就是一个有效的测试。【参考方案2】:
只需在没有else
部分的if
语句之前添加/* istanbul ignore else */
。 Coverage Reporter 将忽略 else 路径。
【讨论】:
以上是关于else 单元测试中未采用的路径的主要内容,如果未能解决你的问题,请参考以下文章
Angular 4 单元测试中未调用 ngOnChanges detectChanges()