План тестирования Redux Saga — интеграционные тесты не выполняются

#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 добавил типы действия