【发布时间】:2022-02-22 11:11:52
【问题描述】:
我想测试这个 saga API 函数:
export function* fetchEshopProjects(action: ProjectActionsGetEshopProjects) {
yield put(projectActions.currentEshopProjectsLoading(true))
const response: {
projects: string[],
error: Error
} = yield call(ajax.json, '/new-project/eshops-projects/?eshopId=' + action.eshopId)
if (response.error) {
yield put(projectActions.currentEshopProjectsFailed(response.error))
yield put(projectActions.currentEshopProjectsLoading(false))
} else {
yield put(projectActions.setCurrentEshopProjects(response.projects))
yield put(projectActions.currentEshopProjectsLoading(false))
}
}
我已经写了这个测试:
test('fetch projects', async() => {
mockParams({
locale: 'en-US',
});
ajax.json = jest.fn().mockResolvedValue(['kbp', 'tbp'])
const dispatched = []
await runSaga({
dispatch: (action) => dispatched.push(action),
},
fetchEshopProjects
)
expect(dispatched).toEqual([
{
type: 'CURRENT_ESHOP_PROJECTS_LOADING',
loadingState: true,
},
{
type: 'SET_CURRENT_ESHOP_PROJECTS',
payload: ['kbp', 'tbp'],
},
{
type: 'CURRENT_ESHOP_PROJECTS_LOADING',
loadingState: false,
},
])
})
似乎代码只到达yield call(ajax.json... 部分,然后返回到测试功能——因此只记录了第一次调度。如何更正测试以使其成功结束?
【问题讨论】:
标签: reactjs typescript react-redux jestjs redux-saga