有
foo
包含作为Node.js模块加载时无法测试的行的模块:
if (typeof module !== 'object') {
do.something(); // line shows as uncovered
}
...
这条线路通常不能用
require('./foo')
因为
module
总是真实的,并且在没有连接到节点模块加载程序的情况下不能在模块外部模拟。
所以我必须在没有
require
要完全控制模块局部变量:
const fooSource = fs.readFileSync(fooPath);
new Function('module', fooSource)();
expect(do.something).toHaveBeenCalled();
据我所知,Jest code coverage(伊斯坦布尔)钩住Node.js模块加载器,并用coverage语句装饰模块主体,例如:
if (typeof module !== 'object') {
cov_v50bukkd.f[2]++;
do.something(); // shows as uncovered
}
我宁愿不只是马克
福
有100%的覆盖率,但如果可能的话,像装饰
fooSource
手动使用覆盖率语句。
我的出发点是
福
源代码不应该被修改以支持代码覆盖率;它在其他方面已经足够可测试了。