Karma测试:测量未经测试的代码的覆盖范围

hoe*_*ing 7 javascript typescript karma-runner webpack

我已经成功地使用Karma和Webpack为我在用Typescript编写的沙盒项目中设置了测试.代码覆盖率指标由Istanbul Instrumenter Loader收集.困扰我的是,我只报告了测试中导入的模块的覆盖范围,因此报告的100%覆盖范围实际上是一个肮脏的谎言.

寻找解决方案,我在Istanbul Instrumenter Loader的自述文件中找到了一段:

要为所有组件创建代码覆盖率报告(即使对于那些尚未进行测试的组件),您还需要所有1)源和2)测试.

测试/ index.js

// requires all tests in `project/test/src/components/**/index.js`
const tests = require.context('./src/components/', true, /index\.js$/);

tests.keys().forEach(tests);

// requires all components in `project/src/components/**/index.js`
const components = require.context('../src/components/', true, /index\.js$/);

components.keys().forEach(components);
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这个代码片段遍历源目录中的所有索引文件并从中导入所有内容.我的问题是:如何正确地将这个片段翻译成Typescript?或者是否有更好的解决方案,不需要import * from *解决方法?

编辑

我发现了这个问题:Typescript 1.8模块:从文件夹导入所有文件.这是否意味着我需要一个index.ts文件,我必须导入每个模块?这意味着每次我引入一个新的模块文件时,我都必须手动将其导入添加到index.ts?肯定有更好的办法.

编辑2

我也对其他可以为整个代码库生成覆盖率报告的工具持开放态度,这是他们能够应对Typescript + Webpack + Karma + Mocha堆栈的唯一条件.我已经尝试过nyc,但根本无法获得任何代码覆盖率.

Iho*_*hor 1

对于使用 Karma + Istanbul 作为覆盖率报告器 \xe2\x80\x93 进行测试的项目,我刚刚创建了 karma 插件,它将项目中的所有文件添加到覆盖率统计中 - https://github.com/kopach/karma-sabarivka -记者

\n

使用它->安装npm install --save-dev karma-sabarivka-reporter

\n

并像这样更新karma.conf.js

\n
reporters: [\n  // ...\n  \'sabarivka\'\n  // \'coverage-istanbul\' or \'coverage\' (reporters order is important for \'coverage\' reporter)\n  // ...\n],\ncoverageReporter: {\n  include: [\n      // Specify include pattern(s) first\n      \'src/**/*.(ts|js)\',\n      // Then specify "do not touch" patterns (note `!` sign on the beginning of each statement)\n      \'!src/main.(ts|js)\',\n      \'!src/**/*.spec.(ts|js)\',\n      \'!src/**/*.module.(ts|js)\',\n      \'!src/**/environment*.(ts|js)\'\n  ]\n},\n
Run Code Online (Sandbox Code Playgroud)\n