【发布时间】:2018-12-28 21:42:32
【问题描述】:
我想开玩笑地测试一个模拟函数的返回值。
在下面的代码中我想模拟 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: Cannot read property '0' of undefined
【问题讨论】:
-
在您的示例中,您的操作完全按照 jest 文档的建议进行。我复制粘贴了你的代码,两个测试都开玩笑地通过了。您遗漏了一些导致测试失败的内容,因为您的代码很好。
-
我已经在全球范围内安装了 jest,我的 jest 版本是 v20.04,我正在使用 jest --watch 运行测试
-
我可以知道您正在使用哪个版本的 jest 以及您如何运行测试
-
我玩的是 23.4.0 版。我正在运行一个 npm 脚本
"scripts": { ... "test": "jest" }。该代码位于 .test.js 文件中。全部在使用 create-react-app 创建的项目中。 -
但是我的 create-react-app 安装了 jest 版本 20.0.4 你是如何在 create-react-app 中获得最新版本的 jest 而不弹出它???