2014-10-01 57 views
4

我已经构建了一个使用qunit进行测试的grunt安装程序,并使用istanbul生成覆盖率报告,但我无法获得storeCoverage任务以完成该错误:未覆盖信息集。grunt-istanbul错误:未收集覆盖范围信息

Gruntfile.js

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

function runable() 
{ 
    return true; 
}; 

test1.html

<!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道和一个断言不会在仪表文件并运行成功。但是当它碰到storeCoverage任务时就会失败。难道我做错了什么?任何帮助,当然赞赏。

+2

在这里遇到同样的问题。你有没有找到解决方案? – Dee 2014-10-30 17:08:22

+0

我也有类似的配置相同的问题。任何更新非常感谢! – theUtherSide 2015-09-18 21:24:34

回答

1

我能够使用grunt-istanbul项目中的Gruntfile.js获得此工作。

他们的文档表明reloadTasks不是必需的,但对我来说实际上是这样。他们的clean任务也协助整理。在他们的文档中还指出,您可以设置ENV变量,而不是使用env任务。

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

env: { 
    coverage: { 
    APP_DIR_FOR_CODE_COVERAGE: rootPath + 'path/to/instrument' 
    } 
}, 

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

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

我的任务是这样的:

grunt.registerTask('cover',[ 
    'env:coverage', 
    'clean', 
    'instrument', 
    'reloadTasks', 
    'connect', 
    'qunit', 
    'storeCoverage', 
    'makeReport' 
]); 
0

的问题是有点老了,但它可能会帮助别人。

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

见例如:

Gruntfile.js:

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文件。

module.exports = function (path) { 
    return require((process.env.APP_DIR_FOR_CODE_COVERAGE || '../lib/') + path); 
    }; 

并在测试文件中使用它。

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); 
    }); 

});