在redux saga中单元测试多个连续'put'调用

时间:2018-02-25 15:38:38

标签: redux-saga

我有一个已经写好的传奇,其中有4-5个收益率并且为它编写了适当的单元测试。但是现在作为缺陷修正的一部分,我必须在传奇中的最后一个产量(actionB)(B)效果之前添加另一个产量放(actionA)(A)效果。因此,正如预期的那样,我的一个测试用例失败,之前测试过(B)。

所以,因为我只是为saga添加了另一个yield,为了使我之前的测试正确运行,我只是在单元测试中添加了另一个generator.next()调用,以使其转到最后一个yield。但由于某种原因,并没有纠正它。

在添加一个屈服点(动作)效果时,我需要做些什么吗?

很抱歉,如果我无法显示大量代码,并且只能在概念上解释,因为我现在没有代码在我面前,但需要一个答案。所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我意识到这个问题有点老了,但是在尝试解决此问题时遇到了这个问题,因此请在此处发布答案。

我把这个放在我的Saga函数测试的开始处

beforeEach(() => { generator = sagaFunctionYouAreTesting(MOCK_ACTION_PAYLOAD);})

如果yield put(actionB)(B)依赖于yield put(actionA)(A)的某种响应,则需要将其传递给下一个函数,如下所示:

 // first we see that action A is called
  expect(generator.next().value.call).toEqual(
    call(
      api.actionA,
      'any params here'
    ).call
  );

 // lets pretend action A returns an array for action B to use
  const mockActionAResult = [{ id: '12345', name: 'foo' }];

  // then we check that action B is called
  expect(
    generator.next(mockActionAResult).value.call
  ).toEqual(call(api.actionB, 'any params here').call);

// lets pretend action B returns success or failure
const mockActionBResult = {status: 200}

// then you could keep going down the line or check for something like a success 
  expect(
    generator.next(mockActionBResult).value
  ).toEqual(
    put({
      type: 'SUCCESS'
    })
  );