【发布时间】:2021-03-04 22:48:36
【问题描述】:
我正在尝试使用 Jest 模拟 fs.writeFile 的 promise 版本,但未调用模拟函数。
要测试的函数 (createFile.js):
const { writeFile } = require("fs").promises;
const createNewFile = async () => {
await writeFile(`${__dirname}/newFile.txt`, "Test content");
};
module.exports = {
createNewFile,
};
玩笑测试 (createFile.test.js):
const fs = require("fs").promises;
const { createNewFile } = require("./createFile.js");
it("Calls writeFile", async () => {
const writeFileSpy = jest.spyOn(fs, "writeFile");
await createNewFile();
expect(writeFileSpy).toHaveBeenCalledTimes(1);
writeFileSpy.mockClear();
});
我知道 writeFile 实际上被调用了,因为我运行了 node -e "require(\"./createFile.js\").createNewFile()" 并创建了文件。
依赖版本
- Node.js:14.1.0
- 开玩笑:26.6.3
-- 这是createFile.test.js文件的另一个尝试--
const fs = require("fs");
const { createNewFile } = require("./createFile.js");
it("Calls writeFile", async () => {
const writeFileMock = jest.fn();
jest.mock("fs", () => ({
promises: {
writeFile: writeFileMock,
},
}));
await createNewFile();
expect(writeFileMock).toHaveBeenCalledTimes(1);
});
这会引发以下错误:
ReferenceError: /Users/danlevy/Desktop/test/src/createFile.test.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: writeFileMock
【问题讨论】:
标签: node.js jestjs mocking fs spy