【问题标题】:How to ignore lines for code coverage in Jest如何在 Jest 中忽略代码覆盖的行
【发布时间】:2016-08-03 09:51:27
【问题描述】:

在 Jest 中,有什么方法可以忽略测试覆盖率的代码? 我尝试使用

/* istanbul ignore next */

但它似乎不起作用。

【问题讨论】:

    标签: code-coverage jestjs istanbul


    【解决方案1】:

    有效。

    (function(global) {
        var defineAsGlobal = true;
        /* istanbul ignore next */
        if(typeof exports === 'object') {
            module.exports = lib;
            defineAsGlobal = false;
        }
        /* istanbul ignore next */
        if(typeof modules === 'object' && typeof modules.define === 'function') {
            modules.define('lib', function(provide) {
                provide(lib);
            });
            defineAsGlobal = false;
        }
        /* istanbul ignore next */
        if(typeof define === 'function') {
            define(function(require, exports, module) {
                module.exports = lib;
            });
            defineAsGlobal = false;
        }
        /* istanbul ignore next */
        defineAsGlobal && (global.lib = lib);
    })(this);
    

    示例项目https://github.com/ilyar/sandbox/tree/master/jest

    【讨论】:

    • 对我不起作用。我使用带有 jest v23.6.0 的反应脚本 v2.1.5
    【解决方案2】:

    为以后发现此内容的任何人更新。

    /* istanbul ignore next */ 
    

    可以工作,但从 The Jest 官方文档中可以看到:

    coveragePathIgnorePatterns 似乎没有任何效果。

    确保您没有使用 babel-plugin-istanbul 插件。笑话 包裹伊斯坦布尔,因此也告诉伊斯坦布尔哪些文件 具有覆盖集合的仪器。使用 babel-plugin-istanbul 时, Babel 处理的每个文件都会有覆盖集合 代码,因此coveragePathIgnorePatterns不会忽略它。

    文档可以在这里找到:Documentation

    所以为了解决这个问题卸载 babel-plugin-istanbul:

    如果它是一个仅基于 javascript 的库,则可以运行 npm uninstall --save babel-plugin-istanbulnpm uninstall --save-dev babel-plugin-istanbul 如果您安装了一个需要链接的包含本机内容的库,并且您已将其与 rnpm 链接,那么您可以这样做:rnpm unlink package_name 然后按照步骤 1 - Aakash Sigdel

    此引述来自 Aakash Sigdel,可在此处找到:quote

    【讨论】:

    • 如果使用创建反应应用程序,它会为您安装此插件,而不是尝试使用 collectCoverageFrom 和!否定路径: "collectCoverageFrom": [ "src/**/*.{js,jsx,ts,tsx}", "!/node_modules/",
    • 这对我不起作用,即使在卸载 babel-plugin-istanbul 之后,这些行也会显示在覆盖范围内(使用 TS)。
    • 在我的例子中,我有coverageProvider:'v8',它导致了这个问题。正在做:coverageProvider: 'babel',修复它并且编译指示效果很好。
    【解决方案3】:

    找到了解决方法(评论前后的空格似乎是必要的):

    class Foo {
      bar /* istanbul ignore next */ () {
        return 'biu~';
      }
    }
    

    【讨论】:

    • 这对我有用。我必须将注释放在要忽略的函数前面,而不是上面。
    【解决方案4】:

    在我的例子中,我有coverageProvider:'v8',它导致了这个问题。正在做:coverageProvider: 'babel',修复它并且编译指示效果很好。

    【讨论】:

      【解决方案5】:

      根据a babel issue thread Istambul 似乎有一个错误,它假定前面的代码行以分号结尾...

      constructor(message: string) {
        // TODO: how do I get Jest code coverage for "super(message)?
        // /* istanbul ignore next */ assumes the preceding line of code is terminated with a ;
          DEBUG: console.log();
          /* istanbul ignore next */
          super(message);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 1970-01-01
        • 2015-07-29
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多