首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取grunt伊斯坦布尔错误:未收集覆盖范围信息

获取grunt伊斯坦布尔错误:未收集覆盖范围信息
EN

Stack Overflow用户
提问于 2014-10-02 00:32:09
回答 2查看 1.4K关注 0票数 4

我已经为使用qunit进行测试和使用伊斯坦布尔生成覆盖率报告构建了一个grunt设置,但是我无法让storeCoverage任务在不出现错误的情况下完成:没有收集覆盖率信息。

Gruntfile.js

代码语言:javascript
复制
module.exports = function (grunt)
{
  "use strict";

  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),
    connect: {
      root_server: {
        options: {
          port: 2424,
          base: 'qunit'
        },
      }
    },
    qunit: {
      all: ['qunit/test1.html']
    },
    instrument: {
      files: "testable.js",
      options: {
        lazy: true,
        basePath: "qunit/"
      }
    },
    storeCoverage: {
      options: {
        dir: "report/"
      }
    },
    makeReport: {
      src: "report/*.json",
      options: {
        type: "lcov",
        dir: "test",
        print: "detail"
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.loadNpmTasks("grunt-contrib-qunit");
  grunt.loadNpmTasks("grunt-istanbul");

  grunt.registerTask("default", ["instrument", "connect", "qunit", "storeCoverage"/*, "makeReport"*/]);

};

testable.js

代码语言:javascript
复制
function runable ()
{
  return true;
};

test1.html

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>QUnit Example</title>
  <link rel="stylesheet" href="qunit.css">
</head>
<body>
  <script src="qunit.js"></script>
  <script src="testable.js"></script>
  <script>
    QUnit.test("hello test", function (assert)
    {
      assert.ok(runable());
    });
  </script>
</body>
</html>

一切正常,qunit运行,assert在插入指令的文件上运行并成功。但是,当它遇到storeCoverage任务时,它就会失败。我做错了什么吗?当然,任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2015-09-22 07:29:09

我能够使用grunt-istanbul项目中的Gruntfile.js来实现这一点。

他们的文档表明reloadTasks不是必需的,但对我来说,它实际上是必需的。他们执行的clean任务也会帮助整理工作。在他们的文档中也提到,您可以设置ENV变量,而不是使用env任务。

尝试将这些添加到您的Gruntfile.js

代码语言:javascript
复制
env: {
  coverage: {
    APP_DIR_FOR_CODE_COVERAGE: rootPath + 'path/to/instrument'
  }
},

clean: ['path/to/coverage'],

reloadTasks: {
  rootPath: 'path/to/instrument'
},

我的任务看起来像这样:

代码语言:javascript
复制
grunt.registerTask('cover',[
  'env:coverage',
  'clean',
  'instrument',
  'reloadTasks',
  'connect',
  'qunit',
  'storeCoverage',
  'makeReport'
]);
票数 1
EN

Stack Overflow用户

发布于 2017-05-01 05:09:55

这个问题有点老了,但它可能会对其他人有所帮助。

为了解决这个问题,我需要将我的测试代码指向插入指令的代码,否则就是原始代码。

请参见示例:

Gruntfile.js:

代码语言:javascript
复制
module.exports = function (grunt) {

grunt.initConfig({

    env: {
        coverage: {
            APP_DIR_FOR_CODE_COVERAGE: '../test/coverage/instrument/lib/'
        }
    },
    clean: {
        coverage: {
            src: ['test/coverage/']
        }
    },
    instrument: {
        files: 'lib/*.js',
        options: {
            lazy: true,
            basePath: 'test/coverage/instrument/'
        }
    },
    mochaTest: {
        test: {
            options: {
                reporter: 'spec'
            },
            src: ['test/**/*test.js']
        }
    },
    storeCoverage: {
        options: {
            dir: 'test/coverage/reports'
        }
    },
    makeReport: {
        src: 'test/coverage/reports/**/*.json',
        options: {
            type: 'lcov',
            dir: 'test/coverage/reports',
            print: 'detail'
        }
    }
});

grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-mocha-test');
grunt.loadNpmTasks('grunt-istanbul');
grunt.loadNpmTasks('grunt-env');

grunt.registerTask('test', 'mochaTest');
grunt.registerTask('coverage', ['env:coverage', 'clean', 'instrument', 'mochaTest', 'storeCoverage', 'makeReport']);};

在您的测试代码中,指向插入指令的代码。

grunt-istanbul site中所述,您可以创建requireHelper文件。

代码语言:javascript
复制
module.exports = function (path) {
    return require((process.env.APP_DIR_FOR_CODE_COVERAGE || '../lib/') + path);
  };

并在您的测试文件中使用它。

代码语言:javascript
复制
var requireHelper  = require('./require_helper');
var fileToBeTested = requireHelper('file-to-be-tested');

describe('Test', function () {

    it('should do some test', function () {
        expect(1).to.equal(1);
    });

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26146136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档