-
Notifications
You must be signed in to change notification settings - Fork 0
Mock
ReinerLau edited this page May 24, 2024
·
1 revision
如果函数依赖外部模块,直接测试就会变成集成测试,但我们不关心函数以外的逻辑,因此需要模拟外部模块的数据
UserStore.js
class User {
getUser() {
// logic to get data from a database
}
setUser() {
// logic to store data in a database
}
}
let UserStore = new User();
module.exports = { UserStore };name.js
const { UserStore } = require("./UserStore");
function getUserDisplayName() {
const user = UserStore.getUser();
return `${user.LastName}, ${user.FirstName}`;
}
module.exports = getUserDisplayName;name.test.js
const getUserDisplayName = require("./name");
test("Returns display name", () => {
expect(getUserDisplayName(1)).toBe("Polesny, Ondrej");
});直接运行测试毫无疑问会失败,因此需要模拟一下模块的实现
name.test.js
jest.mock("./UserStore", () => ({
UserStore: {
getUser: jest.fn().mockImplementation((arg) => ({
FirstName: "Ondrej",
LastName: "Polesny",
})),
setUser: jest.fn(),
},
}));如果不关心函数的实现,直接使用 jest.fn 就可以