随机数
随机数是不可预测的。
为了让包含随机数的 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");
});