我想用笑话来测试模拟函数的返回值。
在下面的代码中,我想模拟fs模块的mkdirSync函数
const fs = require("fs");
describe("Testing mock fs.mkdirSync", () => {
fs.mkdirSync = jest.fn().mockReturnValue(5);
fs.mkdirSync("./apple");
it("fs.mkdirSync must have been called", () => {
expect(fs.mkdirSync).toHaveBeenCalled();
});
//This test fails with TypeError: Cannot read property '0' of undefined
it("fs.mkdirSync last return value must be 5", () => {
expect(fs.mkdirSync.mock.results[0].value).toBe(5);
});
});
第二次测试失败并出现TypeError:无法读取未定义的属性“ 0”
答案 0 :(得分:2)
为什么要测试一个开玩笑的模拟函数的返回值?此时,您正在测试jest
。
您可以将fs.mkdirSync
分配给变量并测试该值,因为它是返回值:
const result = fs.mkdirSync("./apple");
it("fs.mkdirSync last return value must be 5", () => {
expect(result).toBe(5);
});
答案 1 :(得分:0)
您的代码是正确的,但是您开玩笑的安装是过时的版本。
将测试复制粘贴到新的create-react-app样板中并运行玩笑会导致问题中描述的行为。
运行npm install jest --save-dev
以安装最新版本的jest。
现在开玩笑会导致两个测试通过。