gpt4 book ai didi

javascript - 使用组合 JavaScript 文件 + Chutzpah/Blanket.js 获取准确的代码覆盖率统计数据

转载 作者:行者123 更新时间:2023-12-02 15:53:57 24 4
gpt4 key购买 nike

我有一个 TypeScript 项目,它使用 Visual Studio 的“将 JavaScript 输出合并到文件中”选项来创建一个包含我的所有应用程序代码(不包括库)的 .js 文件。我正在使用Chutzpah Test Adapter集成并运行 Jasmine 单元测试。如果我在没有测试的情况下运行代码覆盖率分析,该工具会报告我的测试覆盖率是 23%:

Code coverage statistics

是什么导致了这一夸大的统计数据?

我当前的理论是,当 Chutzpah 运行我的代码 (app.js) 以便定义测试中使用的所有类时,blanket.js (Chutzpah 在后台使用它来获取代码覆盖率统计信息)看到这些行正在运行并将它们计为“覆盖行”。

是否有一种方法可以仅将测试期间(而不是测试之前,出于设置目的)命中的行包含在最终的代码覆盖率统计中?或者这个夸大的数字是由其他原因造成的?

这是我的 chutzpah.json:

{
"Compile": {
"Extensions": [ ".ts" ],
"ExtensionsWithNoOutput": [ ".d.ts" ],
"Mode": "External"
},
"References": [
{ "Path": "initialize.js" },
{ "Path": "./MyApp/lib/jquery-1.11.2.min.js" },
{ "Path": "./MyApp/lib/jquery-ui.min.js" },
{ "Path": "./MyApp/lib/knockout-3.3.0.js" },

/* other references here.... */

{ "Path": "./MyApp/app.js" }
],
"Tests": [
{ "Includes": [ "**/*.ts" ], "Excludes": [ "**/*.d.ts" ] }
],
"CodeCoverageIncludes": [ "*app.js*" ],
"TestFileTimeout": 100000
}

最佳答案

TypeScript 生成合理数量的立即调用函数表达式。事实上,它们在文件加载后立即运行,这意味着无论如何它们都会被覆盖。如果您没有收到错误,则表明 22% 的代码可以工作 - 无需为此编写任何测试。

在 C# 或 Java 中,这种情况不会发生,因为如果您没有实例化一个类,它的覆盖率将为 0 - 但在 TypeScript 中,为模块和类生成的一些代码将在您加载文件时运行。

以下是本类(class)可能涵盖的线路的指示:

class Example {
doSomeWork() {
return 50;
}
}

覆盖范围:

✓ var Example = (function () {
✓ function Example() {
✓ }
✓ Example.prototype.doSomeWork = function () {
✗ return 50;
✓ };
✓ return Example;
✓ })();

正如您所看到的,有很多东西只需加载文件就可以“运行”。未涵盖实际行为(返回值的函数)。

我会以与普通对象上的属性类似的方式对这些代码行进行分类 - 您不会想编写特定的测试来覆盖它们 - 但它们会自然地被覆盖。

您无法真正为此调整您的报告,但足以说明您应该对 78% 而不是 22% 感兴趣。

关于javascript - 使用组合 JavaScript 文件 + Chutzpah/Blanket.js 获取准确的代码覆盖率统计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com