2015-05-26 24 views
0

我正在测试框架。断言两个功能是相等的我正在使用:功能相等断言由代码覆盖率报告打破

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

什么是检查职能平等点的单位? – zerkms

+0

我正在开发一个测试框架,我不想让开发人员检查两个对象是否相等,它应该与所有可能的数据类型一起工作,包括函数。它正在工作,但我希望能够运行代码覆盖率报告。 –

回答

0

您可以使用正则表达式删除伊斯坦布尔注入。

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 - 删除全部那些来自字符串的条目
1

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

grunt karma:units

grunt karma:coverage

和代码不会被混淆

相关问题