我无法理解如何对函数进行单元测试,以便 Istanbul 尔认为它们已被覆盖。
举一个非常简单的例子,我创建了这个数学模块:
var add = function( one, two ){
return one + two;
}
module.exports = {
add: add
};
和基本单元测试:
var chai = require('chai');
var expect = chai.expect;
describe('add() method', function(){
it('should do math', function(){
expect( some.add(1, 1) ).to.equal(2);
});
});
Istanbul 尔制作的报告给了我以下结果:
- 声明:66.67% (2/3)
- 分支:100% (0/0)
- 函数:0% (0/1)
- 线条:66.67% (2/3)
- 忽略:无
如果简单地测试调用函数的结果并不能算作覆盖率,那么当代码位于单元测试无法访问的函数范围内时,您应该如何测试此代码?
与所有最棘手的问题一样,这是由一些愚蠢且不相关的事情引起的。
我通过 grunt 运行 istanbul 并使用 env
解决方法,因此在检查覆盖范围时使用正确的目录。就像这样:
env: {
coverage: {
APP_DIR_FOR_CODE_COVERAGE: '../test/coverage/instrument/app/'
}
},
如grunt-istanbul documentation所示
问题是我忘记在为运行覆盖率测试而创建的任务中包含 env:coverage
。
无论如何,如果您遇到同样的问题,您可能也做了一些非常愚蠢的事情。
我是一名优秀的程序员,十分优秀!