[英]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.