簡體   English   中英

開玩笑不是 mocking 功能正常

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM