Я использую 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 подключено, но я все еще не могу найти никакого решения.