摩卡&柴,我怎么模拟期待结果?

时间:2017-01-22 05:57:14

标签: javascript unit-testing mocha chai

我的源代码:

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结果的方法?

1 个答案:

答案 0 :(得分:2)

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

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