测试Redux Saga。有效载荷是预期的,但未定义

时间:2020-11-04 11:47:03

标签: redux redux-saga

我正在学习编写有关sagas的测试。还有下一个传奇:

export function* searchTemplatesSaga(
  action: ReturnType<typeof searchTemplates>,
): SagaIterator {
  try {
    yield put(startLoading(searchTemplates));

    const { data: templates }: AxiosResponse<Paginated<Template>> = yield call(
      searchTemplatesRequest,
      {},
      action.payload,
    );

    yield put(setTemplates(templates));
  } catch (error) {
    yield put(appError({ error }));
  } finally {
    yield put(stopLoading(searchTemplates));
  }
}

我的测试如下:

  it('', () => {
    const saga = searchTemplatesSaga(searchTemplates(mockSearchTemplate));

    expect(saga.next().value).toEqual(put(startLoading(searchTemplates)));

    expect(saga.next().value).toEqual(call(
      searchTemplatesRequest,
      {},
      searchTemplates(mockSearchTemplate).payload,
    ));

    expect(saga.next(mockTempl).value).toEqual(put(setTemplates(mockTempl)));

    ...
  });

问题在于,第一次调用next()和第二次调用next()通过测试,而与put(setTemplates(mockTempl))对应的第三次调用next()失败。

enter image description here

请帮助我找出可能的问题。为什么接受的有效载荷未定义?我正在将数据传递给next()调用。

1 个答案:

答案 0 :(得分:0)

我认为您需要将mockTempl参数移至较早的saga.next()调用中,以声明调用效果。

我强烈建议您转到测试Sagas的运行传奇模式。 它更容易预测,您可以使用玩笑来模拟axios。 https://redux-saga.js.org/docs/advanced/Testing.html