我正在学习编写有关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()失败。
请帮助我找出可能的问题。为什么接受的有效载荷未定义?我正在将数据传递给next()调用。
答案 0 :(得分:0)
我认为您需要将mockTempl参数移至较早的saga.next()调用中,以声明调用效果。
我强烈建议您转到测试Sagas的运行传奇模式。 它更容易预测,您可以使用玩笑来模拟axios。 https://redux-saga.js.org/docs/advanced/Testing.html