我使用Chutzpah测试我的JavaScript测试覆盖率。以下是运行单个测试文件时的覆盖结果示例 referenceFigureEdit.spec.js :
我预计覆盖率为100%,但仅为91.07%。
点击第一行,我可以详细检查我的测试代码。突出显示“未被测试覆盖”的行:
问题A :
我怎么能
对于成功覆盖的代码必须执行的位置/时间是否有一些限制?我在我的it-methods中调用了代理。在构建被测模块时是否需要调用它们?
我测试的代码定义了一些传递给构造函数的委托方法(例如“showErrors”)(例如new saveCommand(...,showErrors))。该委托的方法声明突出显示,不包含在coverage中。但是,这些代表实际上是在测试期间执行的,我希望覆盖范围是100%。
即使showErrors委托中的代码是私有的,我也想测试它(是否应该测试私有方法不是我的问题)。为了在我的测试中执行委托,我模拟了saveCommand。模拟的saveCommand发布传递的委托,在测试中我明确地调用它:
sut.saveCommand.__showErrors();
expect(showAllMessagesSpy).toHaveBeenCalled();
测试成功执行,对我来说没问题。但是,覆盖率结果与预期不符。
问题B :
引用文件errorhandler.js的主要覆盖率结果显示覆盖率为27.59%。我还没有对errorhandler.js进行测试。这个数字是否表示在执行我的主文件referenceFigureEdit.js时执行了errorhandler.js的现有29个语句中的8个?我的主文件直接引用errorhandler.js但不直接引用utils.js。我在哪里可以找到关于如何正确解释这些“子数字”的文档,以及总计47.66%的目的是什么?
答案 0 :(得分:0)
我可以回答问题A:您可以使用chutzpah.json文件指定排除项: " CodeCoverageExcludes":[" path1"," path2"," path3"," etc"]就我而言知道,你只能排除文件,而不是特定的行。
更新:是的,blanket.js是默认的代码覆盖率工具,它只在文件级别排除。
问题B我也想弄清楚。