我有一个已经写好的传奇,其中有4-5个收益率并且为它编写了适当的单元测试。但是现在作为缺陷修正的一部分,我必须在传奇中的最后一个产量(actionB)(B)效果之前添加另一个产量放(actionA)(A)效果。因此,正如预期的那样,我的一个测试用例失败,之前测试过(B)。
所以,因为我只是为saga添加了另一个yield,为了使我之前的测试正确运行,我只是在单元测试中添加了另一个generator.next()调用,以使其转到最后一个yield。但由于某种原因,并没有纠正它。
在添加一个屈服点(动作)效果时,我需要做些什么吗?
很抱歉,如果我无法显示大量代码,并且只能在概念上解释,因为我现在没有代码在我面前,但需要一个答案。所以任何帮助都会受到赞赏。
答案 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'
})
);