簡體   English   中英

模擬APi稱笑話

[英]Mocking APi calls jest

我有一個DataService負責我的API調用-我試圖開玩笑地模擬api調用,但似乎無法正常工作。 我不確定自己在做什么錯-我的DataService似乎未定義。

這是功能

const getStepData = (id) => {
  return async dispatch => {
    try {
      dispatch(fetchStepBegin());

      const res = await DataService.fetchStepData(id);
      const sortedTask = sortedTaskData(res)

      const sortedStepData = sortStepData(res)
      const newData = createSortedDataForDragAndDrop(sortedTask, sortedStepData)
      dispatch(fetchRawStepDataSuccess(res.data))
      dispatch(fetchStepDataSuccess(newData))
    }
    catch (err) {
      dispatch(fetchStepError(err))
      throw (err)
    }
  }
}

這是我編寫的測試-我很確定自己在嘲笑不正確

  it('Data Api end point called with corrent studyId', () => {
    jest.mock(DataService);
    DataService.fetchStepData() = jest.fn()
    CellStepManagementOperations.getStepData(5);
    expect(DataService.fetchStepData).toHaveBeenCalledWith(5);

  });

我認為這里的問題是您正在嘗試同步測試異步操作創建者。 因此,您的expect函數不會在運行之前等待getStepData完成。

我必須要做的事情與您嘗試做的事情非常相似,並且我使用了一個名為redux-testkit的庫。 請在此處查看有關使用服務測試異步操作創建者的部分。 您甚至可以為API服務設置模擬返回值,在測試時,我發現這非常有用。

使用此庫,您將能夠await getStepData異步操作創建者完成運行expect函數之前的操作。

您將不得不使用您的代碼,但是它可能看起來像這樣:

it('Data Api end point called with corrent studyId', () => {
  jest.mock(DataService);
  DataService.fetchStepData() = jest.fn()
  const dispatches = await Thunk(CellStepManagementOperations.getStepData).execute(5);
  expect(DataService.fetchStepData).toHaveBeenCalledWith(5);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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