Javascript 函数相等断言被代码覆盖率报告破坏
我正在开发一个测试框架。要断言两个函数相等,我使用:Javascript 函数相等断言被代码覆盖率报告破坏,javascript,code-coverage,karma-runner,istanbul,Javascript,Code Coverage,Karma Runner,Istanbul,我正在开发一个测试框架。要断言两个函数相等,我使用: var a = function(){ return 5; }; var b = function(){ return 5; }; var areEqual = (a.toString() == b.toString()); 我正在用karma运行一些测试,一切都很好,直到我用karma覆盖率报告添加了一个测试覆盖率报告。上面的断言失败了,因为伊斯坦布尔似乎在函数中添加代码2 a.toString() 看起来像: function ()
var a = function(){ return 5; };
var b = function(){ return 5; };
var areEqual = (a.toString() == b.toString());
我正在用karma运行一些测试,一切都很好,直到我用karma覆盖率报告添加了一个测试覆盖率报告。上面的断言失败了,因为伊斯坦布尔似乎在函数中添加代码2
a.toString()
看起来像:
function () {
__cov_Mgz6NtZP5n6U6J27W7D4rA.f['33']++;
__cov_Mgz6NtZP5n6U6J27W7D4rA.s['152']++;
return 5;
}
我试过:
/* istanbul ignore next */
var a = function(){ return 5; };
/* istanbul ignore next */
var b = function(){ return 5; };
但它似乎不起作用。您知道我如何解决这个问题。您可以使用正则表达式删除这些内容
var aStr = a.toString();
// function () {__cov_Mgz6NtZP5n6U6J27W7D4rA.f['33']++;__cov_Mgz6NtZP5n6U6J27W7D4rA.s['152']++;return 5;}
var aCleanStr = aStr.replace(/__cov.*?;/g, '');
// function () {return 5;}
表达式是/\uuu-cov.*/g
,其中
-将匹配以\uuuCOV
开头的子字符串\uuCOV
*代码>-将匹配任何字符,直到第一个
代码>,因为两次注入之间可能有一些代码,
这里表示“非贪婪”选项?
- flag
-从字符串中删除所有这些条目g
呼噜业力:单位
及
咕哝业力:覆盖范围
在单元上,代码不会被混淆检查函数相等有什么意义?我正在开发一个测试框架,我不想让开发人员检查两个对象是否相等,它应该适用于所有可能的数据类型,包括函数。它正在工作,但我希望能够运行代码覆盖率报告。