我为我的类写了mock,当我测试创建实例时,一切都正常,但当我测试静态方法时,就不行了。如何解决这个问题?下面是我的测试类:
class Order {
async add(items) {
const order = new OrderModel({items});
await order.save();
//...
}
async find(items) {
const query = OrderModel.find({
//condition
});
//...
}
}我的OrderModel模拟:
const mockOrderModel = {
save: jest.fn(),
find: jest.fn(),
exec: jest.fn()
};
jest.mock('../order/order.model', () => {
return jest.fn().mockImplementation(() => {
return {
save: mockOrderModel.save,
find: mockOrderModel.find,
exec: mockOrderModel.exec
};
});
});并对这两种方法进行测试:
//WORKS
it('add()', async () => {
await order.add(['']);
expect(OrderModel).toHaveBeenCalledTimes(1);
expect(mockOrderModel.save).toHaveBeenCalledTimes(1);
});
//NOT WORKS
it('find()', async () => {
await order.find(['']);
expect(mockOrderModel.find).toHaveBeenCalledTImes(1);
});未调用OrderModel.find()方法
发布于 2018-09-20 02:01:41
这是因为mockOrderModel上的find被定义为对象的属性,而不是静态方法。因此,基本上您是在为具有find属性的Order创建一个模拟对象,该对象必须在实例上调用。Order的静态方法不是模拟的。为此,您可以尝试:
Order.find = jest.fn()
https://stackoverflow.com/questions/51673838
复制相似问题