手动模拟
您可以在与utilities.js
同级别的目录中创建__mocks__
目录,然后在该目录中创建一个名为utilities.js
的文件。
utilities.js
const speak = () => "Function speak";
const add = (x, y) => x + y;
const sub = (x, y) => x - y;
module.exports = { speak, add, sub };
现在,保持一切不变,只需模拟 speak
函数。
__mocks__/utilities.js
const speak = jest.fn(() => "Mocked function speak");
const add = (x, y) => x + y;
const sub = (x, y) => x - y;
module.exports = { speak, add, sub };
现在你可以模拟 utilities.js
utilities.test.js
const { speak, add, sub } = require("./utilities");
jest.mock("./utilities");
test("speak should be mocked", () => {
expect(speak()).toBe("Mocked function speak");
});
模拟 Node 模块
在与 node_modules
相同的级别上创建一个名为__mocks__
的目录,并在此目录中添加文件'axios.js'。
__mocks__/axios.js
const axios = {
get: () => Promise.resolve({ data: { name: "Mocked name" } }),
};
module.exports = axios;
fetch.js
const axios = require("axios");
const fetch = async () => {
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/users/1"
);
return data.name;
};
module.exports = fetch;
使用Node模块,您无需显式调用jest.mock("axios")
。
fetch.test.js
const fetch = require("./fetch");
test("axios should be mocked", async () => {
expect(await fetch()).toBe("Mocked name");
});
jest.mock()
实际上像变量一样得到提升。因此,它们在导入之前被调用。 - Tony