如何在JavaScript中使用Math.random进行测试?

And*_*rle 6 javascript unit-testing

我有一个函数,它将选择最小值和最大值之间的随机值.因此,当我进行测试时,我测试该值落在最小值和最大值之间.但是,由于我的应用程序中的某些失败,测试通过了一些时间,有些时候由于随机性而失败.

覆盖/模拟Math.random()返回0和1并测试我的值是否与最大值或最小值相同是一个好主意吗?或者有没有更好的方法来测试JavaScript中的随机性?

以下是将用于创建随机数的函数:

function constrain(min, max){
    return Math.round(Math.random() * (max - min) + min)
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ves 20

SinonJS是一个JavaScript 模拟框架,它集成了所有主要的JavaScript单元测试框架.适配器将负责"恢复"您在测试期间创建的任何存根/模拟.

// Stub out Math.random so it always returns '4' (chosen by fair dice roll)
sinon.stub(Math, 'random').returns(4);

// Double check that it worked.
equal(Math.random(), 4, "http://xkcd.com/221/");
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句.`Math.random`只返回0到1之间的值,因此4没有多大意义. (5认同)