我使用 Chutzpah 来测试我的 JavaScript 测试覆盖率。这是我运行单个测试文件referenceFigureEdit.spec.js时覆盖结果的示例:
我预计覆盖率为 100%,但只有 91.07%。
单击第一行,我可以详细检查我测试过的代码。突出显示“未包含在测试中”的行:
问题一:
我怎样才能
- 告诉 Chutzpah 这些方法实际上已经被执行或
- 告诉 Chutzpah 不要在覆盖结果中包含这些行?
对于必须在何处/何时执行代码以成为成功覆盖的一部分,是否有一些限制?我在我的 it 方法中调用代表。在构建被测模块期间是否已经需要调用它们?
我测试的代码定义了一些传递给构造函数的委托方法(例如“showErrors”)(例如 new saveCommand(..., showErrors))。该委托的方法声明被突出显示并且不包括在覆盖范围内。但是,这些代表实际上是在测试期间执行的,我希望覆盖率是 100%。
即使 showErrors 委托中的代码是私有的,我也想对其进行测试(是否应该测试私有方法不是我的问题)。为了在我的测试中执行委托,我模拟了 saveCommand。模拟的 saveCommand 发布传递的委托,在测试中我明确调用它:
sut.saveCommand.__showErrors();
expect(showAllMessagesSpy).toHaveBeenCalled();
测试成功执行,对我来说很好。但是,覆盖结果并不像预期的那样。
问题乙:
引用文件 errorhandler.js 的主要覆盖率结果显示覆盖率为 27.59%。我还没有测试 errorhandler.js。该数字是否意味着在执行我的主文件 referenceFigureEdit.js 时执行了 errorhandler.js 的现有 29 条语句中的 8 条?我的主文件直接引用errorhandler.js,但不直接引用utils.js。我在哪里可以找到一些关于如何正确解释这些“子数字”的文档以及 Total of 47.66% 的目的是什么?