我正在研究测试框架。断言两个函数相等,我使用:
var a = function(){ return 5; };
var b = function(){ return 5; };
var areEqual = (a.toString() == b.toString());
我用业力进行了一些测试,一切都很好,直到我添加了一份带有业力报道报告的测试报告。上面的断言是失败的,因为伊斯坦布尔似乎在添加代码两个函数。
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; };
但它似乎不起作用。你知道我怎么解决这个问题。
答案 0 :(得分:2)
目前为止,最好的选择是在另一个业力配置中分离您的承保范围。你可以同时运行两个,比如
grunt karma:units
和
grunt karma:coverage
在单位上代码不会被混淆
答案 1 :(得分:1)
您可以使用正则表达式删除伊斯坦布尔注射。
var aStr = a.toString();
// function () {__cov_Mgz6NtZP5n6U6J27W7D4rA.f['33']++;__cov_Mgz6NtZP5n6U6J27W7D4rA.s['152']++;return 5;}
var aCleanStr = aStr.replace(/__cov.*?;/g, '');
// function () {return 5;}
表达式为/__cov.*?;/g
,其中
__cov
- 将匹配以__cov
.*?;
- 会匹配任何字符,直到第一个;
,因为在伊斯坦布尔注入之间可能会有一些代码,?
这里代表'非贪婪'选项g
- 从字符串