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