2017-01-22 36 views
0

我的源代码:摩卡和柴,我该如何模拟预期结果?

function getElementCountOfArray(arr) { 
    var countObj = {}; 
    arr.forEach((element) => { 
     if(countObj[element]) { 
      countObj[element] ++; 
     } else { 
      countObj[element] = 1; 
     } 
    }); 

    return countObj; 
} 

module.exports = getElementCountOfArray; 

我的测试代码:

describe('getElementCountOfArray', function() { 

    it('test case 1', function() { 
     var numArray = [2, 2, 3, 6, 7, 7, 7, 7, 8, 9]; 

     var result = { 
      2: 2, 
      3: 1, 
      6: 1, 
      7: 4, 
      8: 1, 
      9: 1 
     }; 

     expect(getElementCountOfArray(numArray)).to.eql(result); 
    }); 
}); 

result是我自己计算,我真的觉得是不正确的。

如果result是复杂的数据结构,手动计算并不是一个好主意。我可以在result上犯一个错误。

那么,模拟expect结果的“正确”方法是什么?

回答

2

我会说这个单元测试应该如何工作。 SUT(被测系统)返回的结果,即您正在测试的方法,是SUT完成的处理的产物。要测试SUT ,您必须事先知道最终结果应该是。这就是为什么建议用一个简单的残余期望值来测试SUT结果,你确信的东西是正确的。当然,一些结果可能是复杂的数据结构,但您可以选择使用一个或两个元素来存储期望的结构。

同样,期望值无论多么复杂,都必须易于验证和简单到足以让某人能够使用SUT的干运行。希望这回答你的问题。

+0

谢谢你的支持。无法完全理解,这是否意味着我必须将最终的“结果”给予“期望”?如果是这样,我必须在我的头上运行'function'并给出结果。 – novaline

+0

我的意思是当你期望(实际结果).to.eql(预期结果)时,你必须非常计算你脑海中的'预期结果'。为了方便起见,可能只是考虑一个非常简单的数据结构。例如,您可以简单地使用numArray = [2,2]来计算预期结果。 – Piyush

+0

但我认为简单的情况下测试不够好。也许我应该尽可能少做我的'功能'?所以它可以很容易地测试。 – novaline