#javascript #reactjs #redux-saga #redux-saga-test-plan
#javascript #reactjs #redux-saga #redux-saga-test-plan
Вопрос:
У меня возникли проблемы с началом работы с redux-saga-test-plan. Цель, которую я пытаюсь достичь, — это тестирование интеграции моих саг. Я использую create-react-app, поэтому никаких уникальных настроек нет. Это мой единственный тест, и я не могу запустить его.
CatActions
import * as types from './CatTypes';
//Replace action name and update action types
export const getCats = () => ({
type: types.GET_CATS,
});
export const setCats = payload => ({
type: types.SET_CATS,
payload,
});
CatTypes
export const GET_CATS = 'GET_CATS';
export const SET_CATS = 'SET_CATS';
Вот моя сага:
import { call, put, takeLatest } from 'redux-saga/effects';
import API from './CatApis';
import * as ACTIONS from './CatAction';
import { dispatchSnackbarError } from '../../utils/Shared';
import * as TYPES from './CatTypes';
export function* sagasRequestExample() {
try {
console.log('callin!');
const response = yield call(API.apiExampleRequest);
console.log('response :>> ', response);
yield put(ACTIONS.setCats(response));
} catch (err) {
dispatchSnackbarError(err.response.data);
}
}
export function* GetCats() {
console.log('TYPES :>> ', TYPES);
// On the first call here, TYPES is undefined - why?
yield takeLatest('GET_CATS', sagasRequestExample);
// yield takeLatest(TYPES.GET_CATS, sagasRequestExample);
}
Вот тест:
import { expectSaga } from 'redux-saga-test-plan';
import { GetCats } from './CatSagas';
expectSaga.DEFAULT_TIMEOUT = 10000;
test('just works!', () => {
return (
expectSaga(GetCats)
.take('GET_CATS')
.put({
type: 'RECEIVE_USER',
payload: { id: 42, name: 'Tucker' },
})
// // Dispatch any actions that the saga will `take`.
// .dispatch({ type: 'REQUEST_USER', payload: 42 })
// Start the test. Returns a Promise.
.run()
);
}, 10000);
Я ожидаю, что это завершится неудачей; но я даже не могу начать.
Я использую react-scripts test
(React 17)
Когда мои тесты выполняются, я получаю — я действительно не понимаю, почему TYPES не определено
console.log src/store/Cats/CatSagas.js:21
TYPES :>> undefined
а также
Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.Error:
Я не думаю, что API когда-либо вызывается. Что я здесь делаю не так? Как я должен тестировать эту сагу?
Комментарии:
1. Где
GetCats
определено? Вы импортируете его в свой код, ноGetCats
в том, что вы опубликовали, нет имени экспорта. Аналогично, нет переменной с именемTYPES
. Можете ли вы обновить вопрос, чтобы более точно отразить реальный код?2. Поскольку
TYPES
значение не определено, было бы полезно посмотретьCatTypes.js
, из чего вы импортируете.3. @Jacob добавил типы действия