hoe*_*ing 7 javascript typescript karma-runner webpack
我已经成功地使用Karma和Webpack为我在用Typescript编写的沙盒项目中设置了测试.代码覆盖率指标由Istanbul Instrumenter Loader收集.困扰我的是,我只报告了测试中导入的模块的覆盖范围,因此报告的100%覆盖范围实际上是一个肮脏的谎言.
寻找解决方案,我在Istanbul Instrumenter Loader的自述文件中找到了一段:
要为所有组件创建代码覆盖率报告(即使对于那些尚未进行测试的组件),您还需要所有1)源和2)测试.
测试/ index.js
Run Code Online (Sandbox Code Playgroud)// 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);
如果我理解正确,这个代码片段遍历源目录中的所有索引文件并从中导入所有内容.我的问题是:如何正确地将这个片段翻译成Typescript?或者是否有更好的解决方案,不需要import * from *解决方法?
我发现了这个问题:Typescript 1.8模块:从文件夹导入所有文件.这是否意味着我需要一个index.ts文件,我必须导入每个模块?这意味着每次我引入一个新的模块文件时,我都必须手动将其导入添加到index.ts?肯定有更好的办法.
我也对其他可以为整个代码库生成覆盖率报告的工具持开放态度,这是他们能够应对Typescript + Webpack + Karma + Mocha堆栈的唯一条件.我已经尝试过nyc,但根本无法获得任何代码覆盖率.
对于使用 Karma + Istanbul 作为覆盖率报告器 \xe2\x80\x93 进行测试的项目,我刚刚创建了 karma 插件,它将项目中的所有文件添加到覆盖率统计中 - https://github.com/kopach/karma-sabarivka -记者。
\n使用它->安装npm install --save-dev karma-sabarivka-reporter
并像这样更新karma.conf.js:
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},\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |