代码之家  ›  专栏  ›  技术社区  ›  hoefling

业力测试:测量未测试代码的覆盖率

  •  7
  • hoefling  · 技术社区  · 6 年前

    我已经成功地为我的业力和网页包设置了测试 sandbox project written in Typescript I get the coverage reported only for the modules that are being imported in the tests ,所以报道的100%的报道实际上是一个肮脏的谎言。

    为了寻找解决方案,我在伊斯坦布尔仪器加载器公司找到了一条通道 readme

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

    试验/索引.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);
    

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

    编辑

    我发现了一个问题: Typescript 1.8 modules: import all files from folder . 这是否意味着我需要一个 index.ts ? 一定有更好的办法。

    编辑2

    nyc ,但根本无法获得任何代码覆盖率。

    编辑3

    index.js 从上面翻译成打字机:

    declare const require: any;
    
    const ctx = require.context('../src', true, /\.ts$/);
    ctx.keys().map(ctx);
    

    编辑4

    现在有一个karma插件叫做 karma-sabarivka-reporter 修正了覆盖率统计。看看 accepted answer

    1 回复  |  直到 4 年前
        1
  •  1
  •   Ihor    4 年前

    对于使用Karma+伊斯坦布尔作为覆盖率报告器测试的项目,我刚刚创建了Karma插件,它将项目中的所有文件添加到覆盖率统计中- https://github.com/kopach/karma-sabarivka-reporter

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

    karma.conf.js

    reporters: [
      // ...
      'sabarivka'
      // 'coverage-istanbul' or 'coverage' (reporters order is important for 'coverage' reporter)
      // ...
    ],
    coverageReporter: {
      include: [
          // Specify include pattern(s) first
          'src/**/*.(ts|js)',
          // Then specify "do not touch" patterns (note `!` sign on the beginning of each statement)
          '!src/main.(ts|js)',
          '!src/**/*.spec.(ts|js)',
          '!src/**/*.module.(ts|js)',
          '!src/**/environment*.(ts|js)'
      ]
    },
    
        2
  •  3
  •   Community pid    4 年前

    重要提示:

    这个答案解决不了上述问题,根本是错误的。见评论。


    NYC支持覆盖未测试代码 --all 旗子。假设你 test package.json

    "test": "karma start karma.conf.js",
    

    npm install -D nyc ts-node src 目录。

    "coverage": "nyc --all --include src --extension .ts --require ts-node/register npm test",
    
    • --全部 标志用于检查所有文件的覆盖率。
    • --extension .ts --extension .ts --extension .tsx .
    • --include src 为目录检查覆盖率。
    • -- require ts-node/register 是教纽约人理解打字。

    ts-node/register 可能会导致报表上的行号出现问题。为了解决这个问题,你可能需要注册 source map support 也。。