runSaga не работает, если в вызове yield в Saga есть параметр действия - PullRequest
0 голосов
/ 14 июля 2020

Я использую Jest для создания модульного теста в моем проекте React, который использует redux-saga.

Это блок кода моей саги

export function* getDataSaga(action) {
  try {
    const data = yield call(http.getData, action.params);
    console.log('Hello')
    yield put({
      type: actionTypes.LOAD_DATA_SUCCESS,
      data: data,
    });
  } catch (err) {
    yield put({
      type: actionTypes.LOAD_DATA_FAILED,
    });
  }
}

А это мой модульный тест

import { runSaga } from 'redux-saga'
import http from '../../../http';
import { getDataSaga } from '../data'

describe('getDataSaga', () => {
    
    it('should call api and dispatch success action', async () => {
        const dummyData = {name : "Data 1"};
        const requestData = jest.spyOn(http, "getData").mockImplementation(() => Promise.resolve(dummyData));
    
        const dispatched = [];
    
        const result = await runSaga({
            dispatch : (action) => dispatched.push(action),
        }, getDataSaga);

       
        const expectedAction = {Data : {name: "Data 1"},type: "LOAD_DATA_SUCCESS"};
    
        expect(requestData).toHaveBeenCalledTimes(1)

        expect(dispatched).toEqual([expectedAction]);
        requestData.mockClear();
    })

});

Моя проблема в том, что когда я удаляю action.param из приведенного ниже кода, runSaga работает должным образом и выполняется getDataSaga, но не если я верну его обратно.

const data = yield call(http.getData, action.params); изменить на const data = yield call(http.getData);

Я думаю, что это https://github.com/redux-saga/redux-saga/issues/48 подключено, но я все еще не могу найти никакого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...