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