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

是什么导致了这个膨胀的统计数据?
我目前的理论是,当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
}发布于 2015-07-30 07:20:50
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%感兴趣。
https://stackoverflow.com/questions/31709963
复制相似问题