在redux-saga的jest测试中产生多个值,可以使用redux-saga-test-plan
库来模拟生成多个值。下面是一个完整的示例:
首先,安装redux-saga-test-plan
库:
npm install redux-saga-test-plan
然后,假设我们有一个saga函数,它从API中获取数据并将其存储到Redux store中:
import { call, put, takeEvery } from 'redux-saga/effects';
import { fetchDataSuccess, fetchDataFailure } from './actions';
import { fetchApiData } from './api';
export function* fetchDataSaga() {
try {
const data = yield call(fetchApiData);
yield put(fetchDataSuccess(data));
} catch (error) {
yield put(fetchDataFailure(error));
}
}
export function* watchFetchData() {
yield takeEvery('FETCH_DATA', fetchDataSaga);
}
接下来,我们可以使用redux-saga-test-plan
来测试这个saga函数。我们可以使用expectSaga
函数来创建一个测试计划,并使用provide
函数来模拟API调用返回的数据:
import { expectSaga } from 'redux-saga-test-plan';
import { fetchDataSaga } from './sagas';
import { fetchDataSuccess, fetchDataFailure } from './actions';
import { fetchApiData } from './api';
it('should handle successful data fetching', () => {
const testData = { id: 1, name: 'Test Data' };
return expectSaga(fetchDataSaga)
.provide([[call(fetchApiData), testData]])
.put(fetchDataSuccess(testData))
.run();
});
it('should handle data fetching failure', () => {
const error = new Error('API Error');
return expectSaga(fetchDataSaga)
.provide([[call(fetchApiData), Promise.reject(error)]])
.put(fetchDataFailure(error))
.run();
});
在上面的示例中,我们使用provide
函数来模拟call(fetchApiData)
调用返回的数据。在第一个测试中,我们提供了一个成功的返回值testData
,并期望saga
函数会调用put(fetchDataSuccess(testData))
来将数据存储到Redux store中。在第二个测试中,我们提供了一个失败的返回值Promise.reject(error)
,并期望saga
函数会调用put(fetchDataFailure(error))
来处理错误。
这样,我们就可以在redux-saga的jest测试中产生多个值了。请注意,以上示例中的fetchApiData
、fetchDataSuccess
和fetchDataFailure
是示意性的函数和动作,你需要根据实际情况进行替换。
领取专属 10元无门槛券
手把手带您无忧上云