gpt4 book ai didi

javascript - 如何从模拟函数中期待().toHaveBeenCalled

转载 作者:行者123 更新时间:2023-12-02 23:06:21 25 4
gpt4 key购买 nike

我有一个函数,它只是创建一个写入流并写入它...我想测试该函数,并测试 createWriteStreamwrite() 函数> 被调用。但是,我正在 mock fs 模块,因为我不想在测试时实际写入文件。

我可以成功检查 createWriteStream 是否被调用,但不能 write...这是为什么?

代码

const myFunction = () => {
const stream = fs.createWriteStream("test.csv", {
encoding: "utf8"
});

stream.write("hello world");
stream.end();
}

测试

const fs = require("fs");

jest.mock("fs", () => ({
createWriteStream: jest.fn(() => ({
write: jest.fn(),
end: jest.fn()
}))
}));

describe("myFunction", () => {
it("should write a new file", () => {
myFunction();

expect(fs.createWriteStream).toHaveBeenCalled(); //Passes

expect(fs.createWriteStream().write).toHaveBeenCalled(); //Fails
});
});

最佳答案

你可以做如下的事情。这样, writeMock 的引用将不会动态生成(在您的示例中,因此 jest 无法引用正确的 write 方法)并且 jest 检测该函数是否已被调用通过引用调用。

jest.mock("fs");
describe('myFunction', () => {
it('should write a new file', () => {
const writeMock = jest.fn()
const endMock = jest.fn()

fs.createWriteStream = jest.fn(() => ({
write: writeMock,
end: endMock,
}));
myFunction();

expect(fs.createWriteStream).toHaveBeenCalled(); //Passes

expect(writeMock).toHaveBeenCalled(); //Passes
});
});

关于javascript - 如何从模拟函数中期待().toHaveBeenCalled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57579528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com