【问题标题】:How to test this Redux Saga code with Jest?如何用 Jest 测试这个 Redux Saga 代码?
【发布时间】:2020-03-21 09:43:45
【问题描述】:

过去,我们使用更容易测试的 Redux Thunk。转换成 Redux-Saga 之后是这样的:

import { takeLatest, put } from "redux-saga/effects";
function* fetchTasksSaga(){
 try {
const taskResponse = yield fetch("API URL")
const tasks = yield taskResponse.json()
yield put(fetchTasksSuccess(tasks));
} catch (error) {
yield put(fetchTasksError(error.message));
  }
}
export default function* watchFetchTasksSaga(){
    yield takeLatest("FETCH_TASKS_START", fetchTasksSaga)
}

对于这个 sn-p,它看起来如何像是一个开玩笑的测试?

【问题讨论】:

    标签: reactjs redux react-redux jestjs redux-saga


    【解决方案1】:

    它看起来像下面的代码:

    describe('saga testing watchFetchTasksSaga', () => {
       it('should test watchFetchTasksSaga', () => {
         const gen = watchFetchTasksSaga();
         expect(gen.next().value).toEqual(takeLatest("FETCH_TASKS_START", fetchTasksSaga));
            });
    });
    
    describe('test fetchTasksSaga', () => {
        const gen = cloneableGenerator(fetchTasksSaga)();
        expect(gen.next().value).toEqual(fetch("API URL"));
    
        it('test fetchTasksSaga success scenario', () => {
          const gen1 = gen.clone();
          const data = '2cd09fe0-3b6f-11ea-b05a-3b06a24be1d6';
          const response = { data };
          expect(gen1.next(response).value).toEqual(response.json());
          expect(gen1.next().value).toEqual(
            put(fetchTasksSuccess(tasks)),
          );
          expect(gen1.next().done).toBe(true);
        });
    
        it('should test error scenario', () => {
          const gen1 = gen.clone();
          const error = {
            message: 'some error',
          };
          expect(gen1.throw(error).value).toEqual(
            put(fetchTasksError(error.message)),
          );
        });
      });
    

    参考:https://redux-saga.js.org/docs/advanced/Testing.html

    【讨论】:

    • @newtech-lover 上面的回答对你有帮助吗?
    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2019-03-11
    • 2021-11-21
    相关资源
    最近更新 更多