2017-01-22 77 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