使用组合的JavaScript文件+ Chutzpah / Blanket.js

时间:2015-07-29 19:57:31

标签: javascript visual-studio typescript chutzpah blanket.js

我有一个TypeScript项目,它使用Visual Studio的“将JavaScript输出合并到文件中”选项来创建一个包含我所有应用程序代码(不包括库)的.js文件。我正在使用Chutzpah Test Adapter来集成和运行Jasmine单元测试。如果我使用 no 测试运行代码覆盖率分析,该工具报告我有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
}

1 个答案:

答案 0 :(得分:2)

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

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

以下是此课程可能包含的行的说明:

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

覆盖范围:

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

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

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

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