Grunt、Istanbul、Isparta 和 TypeScript
Grunt, Istanbul, Isparta and TypeScript
TL;DR
有没有人使用 Grunt 和 Jasmine 成功生成覆盖率报告?
长话短说:
我有一些用 Jasmine 编写的测试,我想为其生成一些覆盖率信息。为了通用,我实际上使用了 grunt-istanbul,它允许检测器(如 isparta)检测我的代码,然后生成报告。然而,这份报告是基于转译后的代码(因此在 JavaScript 中)。
然后我遇到了 istanbul remap,它查看 TypeScript 编译器生成的映射文件,并将结果基于该文件;然而,我的仪器添加了一些代码到转换后的代码,这意味着我的地图文件不再匹配。至少,这就是我猜的 istanbul-remap 所说的:
Error: Could not find source map for: "src/server/modules/service.js"
这是我的 grunt 配置的一部分:
instrument: {
files: 'src/server/**/*.js',
options: {
lazy: false,
basePath: '.',
babel: {
sourceMap: true
},
instrumenter: require('isparta').Instrumenter
}
},
storeCoverage: {
options: {
dir: 'coverage/reports-server/'
}
},
remapIstanbul: {
dist: {
options: {
reports: {
"html": "./coverage/lcov-report",
"json": "./coverage/coverage.json"
}
},
src: "./coverage/reports-server/coverage.json"
}
},
其实我自己也想通了。这里的技巧如下:
- 用地图编译代码
- 将代码复制到临时位置
- 仪器代码
- 执行测试
- 从临时位置复制代码
- 生成报告
这可能看起来很笨拙,但确实有效!在我的 grunt 文件中,我添加了一个复制任务来为我自动执行这些临时位置副本。
最后我得到了一个正确可靠的结果。
TL;DR
有没有人使用 Grunt 和 Jasmine 成功生成覆盖率报告?
长话短说:
我有一些用 Jasmine 编写的测试,我想为其生成一些覆盖率信息。为了通用,我实际上使用了 grunt-istanbul,它允许检测器(如 isparta)检测我的代码,然后生成报告。然而,这份报告是基于转译后的代码(因此在 JavaScript 中)。
然后我遇到了 istanbul remap,它查看 TypeScript 编译器生成的映射文件,并将结果基于该文件;然而,我的仪器添加了一些代码到转换后的代码,这意味着我的地图文件不再匹配。至少,这就是我猜的 istanbul-remap 所说的:
Error: Could not find source map for: "src/server/modules/service.js"
这是我的 grunt 配置的一部分:
instrument: {
files: 'src/server/**/*.js',
options: {
lazy: false,
basePath: '.',
babel: {
sourceMap: true
},
instrumenter: require('isparta').Instrumenter
}
},
storeCoverage: {
options: {
dir: 'coverage/reports-server/'
}
},
remapIstanbul: {
dist: {
options: {
reports: {
"html": "./coverage/lcov-report",
"json": "./coverage/coverage.json"
}
},
src: "./coverage/reports-server/coverage.json"
}
},
其实我自己也想通了。这里的技巧如下:
- 用地图编译代码
- 将代码复制到临时位置
- 仪器代码
- 执行测试
- 从临时位置复制代码
- 生成报告
这可能看起来很笨拙,但确实有效!在我的 grunt 文件中,我添加了一个复制任务来为我自动执行这些临时位置副本。
最后我得到了一个正确可靠的结果。