【问题标题】:Unit test for a function with random inside. Javascript内部随机函数的单元测试。 Javascript
【发布时间】:2018-03-19 20:02:55
【问题描述】:

我有这个随机函数。我怎样才能为此创建一个单元测试? (必须使用 Jest)

random = (array) => {
    for(let val of array){
        var change_percent = Math.floor(Math.random() * (1001) + -500)/100; // random a rumber from -5 to 5
        val.change_percent = change_percent;
        val.volume = val.volume + Math.floor(Math.random()*(20) + 10); // random increase volume from 10 to 30
        val.price = (parseFloat(val.price) + parseFloat(val.change)).toFixed(2);
        val.change = (val.price * change_percent /100).toFixed(2);
    }
}

【问题讨论】:

    标签: javascript unit-testing ecmascript-6 jestjs


    【解决方案1】:

    由于函数的结果是随机的,所以无法预测正确答案。但是您可以设置可接受值的区间(范围)。就像这样:

    test('get random number in range [0, 20]', () => {
        const result = random();
        expect(result).toBeGreaterThanOrEqual(0);
        expect(result).toBeLessThanOrEqual(20);
    });
    

    【讨论】:

      【解决方案2】:

      您可以像这样简单地模拟Math.random:

      global.Math.random = () => 1
      

      所以random([{change_percent: 2, volume: 2, price: 2, change}]) 会给你一个可以轻松测试的结果。

      请注意,所有测试彼此独立运行,覆盖Math.random 不会干扰其他测试。

      【讨论】:

        猜你喜欢
        • 2015-07-09
        • 2014-02-08
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多