我正在尝试对开玩笑的模拟函数进行断言,我的代码是这样的
const saveProductMock = jest.fn((product) => {
//someLogic
return
});
jest.mock('./db', () => {
return {
saveProduct: saveProductMock
}
})
我的断言应该是这样的
expect(saveProductMock.mock.calls[0][0]).toBe(product)
但我收到以下错误:
<块引用>ReferenceError:在初始化之前无法访问“saveProductMock”在行 saveProduct:saveProductMock
答案 0 :(得分:0)
jest.mock()
是 hoisted。结果,代码实际上是这样运行的:
jest.mock('./db', () => {
return {
saveProduct: saveProductMock
}
})
const saveProductMock = jest.fn((product) => {
//someLogic
return
});
//WAS HERE
解决方案是将登录名放在 jest.mock();
中。
jest.mock('./db', () => {
return {
saveProduct: jest.fn((product) => {
//someLogic
return
})
}
})
其他解决方案是简单地模拟整个模块,然后定义要使用的显式返回值。
const db = require('./db');
jest.mock('./db');
it("example", () => {
db.saveProduct.mockReturnValue(123);
/** different types of return methods */
// db.saveProduct.mockResolvedValue(123);
const product = db.saveProduct();
const expectedProduct = "xyz";
expect(product).toBe(expectedProduct)
})