1

我正在开发一个测试框架。要断言两个函数相等,我正在使用:

var a = function(){ return 5; };
var b = function(){ return 5; };

var areEqual = (a.toString() == b.toString());

我正在使用 karma 进行一些测试,一切都很好,直到我添加了带有 karma-coverage 报告的测试覆盖率报告。上面的断言失败了,因为伊斯坦布尔似乎在添加两个函数的代码。

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

但这似乎不起作用。你知道我该如何解决这个问题。

4

2 回答 2

2

到目前为止,最好的选择是将您的覆盖范围分离到另一个业力配置中。您将能够同时运行两者,例如

grunt karma:units

grunt karma:coverage

在单位上,代码不会被混淆

于 2016-01-06T13:06:59.683 回答
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
  • .*?;- 将匹配任何字符直到第一个;,因为在伊斯坦布尔注射之间可能有一些代码,?这里代表“非贪婪”选项
  • flag g- 从字符串中删除所有这些条目
于 2015-06-09T12:07:59.003 回答