繁体   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