[英]Jest not mocking functions properly
所以我有一个名为 A 的模块,它有两个功能:
function handleCreatedOrder(){
console.log("here")
}
function acquireOrder(){
if(condition) handleCreatedOrder
}
我有一个测试需要检查是否调用了 handleCreatedOrder。 我通过首先import * as acquireOrderWrapper from './module'
模块
然后在测试中我通过let handleCreatedOrderSpy = jest.spyOn(acquireOrderWrapper, "handleCreatedOrder")
监视模块
当我尝试断言expect(handleCreatedOrder).toBeCalled()
它失败,因为收到的呼叫数量不匹配。 我理解这是因为 mocking 不正确,因为调用了来自handleCreatedOrder
的 console.log 但期望语句失败。 我究竟做错了什么?
我的测试目前像
describe("handle acquireOrder success responses", () => {
const reactRedux = { useDispatch, useSelector }
const useDispatchMock = jest.spyOn(reactRedux, "useDispatch")
test("test1", async () => {
let handleCreatedOrderSpy = jest.spyOn(acquireOrderWrapper, "handleCreatedOrder")
await acquireOrder()
expect(handleCreatedOrderSpy).toBeCalled()
}
我认为您需要做的是首先在 handleCreatedOrder function 上创建一个间谍,然后在您的测试中调用 acquireOrder function。
一旦你执行了acquireOrder function,spy就会被调用,你的测试应该通过了。 我通常使用 angular 和 typescript 开发我的前端,但对于 reactJS 它应该看起来相似。
test('test if function was called', async () => {
jest.spyOn(component, 'handleCreatedOrder').mockImplementation();
await acquireOrder();
expect(component.handleCreatedOrder).toHaveBeenCalled();
}
运行 acquireOrder function 后,您可能需要在测试中添加 changeDetector。 在 typescript 中,我通常在像这样运行 function 后添加fixture.detectChanges
fixture.detectChanges();
我还注意到您在 function 之后缺少 ()。
function acquireOrder(){
if(condition) handleCreatedOrder()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.