首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在redux-saga的jest测试中产生多个值?

在redux-saga的jest测试中产生多个值,可以使用redux-saga-test-plan库来模拟生成多个值。下面是一个完整的示例:

首先,安装redux-saga-test-plan库:

代码语言:txt
复制
npm install redux-saga-test-plan

然后,假设我们有一个saga函数,它从API中获取数据并将其存储到Redux store中:

代码语言:txt
复制
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调用返回的数据:

代码语言:txt
复制
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测试中产生多个值了。请注意,以上示例中的fetchApiDatafetchDataSuccessfetchDataFailure是示意性的函数和动作,你需要根据实际情况进行替换。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券