Skip to main content

随机数

随机数是不可预测的。

为了让包含随机数的 SUT 变得稳定,可预测。

比如我们要测试下面的函数,

export function generatorRandomString(length: number) {
let result = "";
const characters = "dfsafsadgsdlkgjsadlkjgfsadlkfjlskadj";

for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
result += characters.charAt(randomIndex);
}

return result;
}

该函数每次返回的结果都是不一样的。

为了让其变得可控,需要使用

vi.spyOn(Math, "random").mockImplementation(() => {return ...})

去 stub 随机数逻辑。

也可以使用 mockImplementationOnce

vi.spyOn(Math, "random").mockImplementationOnce(() => {return ...})

来一次性地 stub 随机数逻辑。

it("should generator random string", () => {
vi.spyOn(Math, "random").mockImplementation(() => {
return 0.2;
});

const result = generatorRandomString(2);

expect(result).toBe("cc");
});