Тестовые действия с пользовательской подписью с использованием redux-mock-store - PullRequest
0 голосов
/ 02 марта 2020

У меня есть несколько пользовательских промежуточных программ, которые принимают следующую сигнатуру действия.

// example of custom actions to be dealth by redux-middleware 
const customAction = (arg1, arg2) => (dispatch) => ({
  types: ["fetch_request", "fetch_success", "fetch_failure"],
  promise: axios({ ...
    })
});

Пользовательское промежуточное программное обеспечение redux перехватывает эти действия с помощью types prop и запускает обещание, используя fetch_request, в зависимости от ответа запускается действие fetch_success / fetch_failure. Важно отметить, что именно эти действия запрос / успех / сбой имеют обычную сигнатуру избыточного действия. IE:

// example of conventional redux action
const action = {
  type: "abc",
  payload: {...}
}

Я пытаюсь интегрировать redux-mock-store с jest для тестирования вышеуказанных действий. Используя redux-mock-store, когда я despatch действия с настраиваемым действием, как наверху:

// import of modules & other jest setup code ignored for this example
// mock store setup 
const middlewares = [a,b];
const mockStore = configureStore(middlewares);
const store = mockStore(reducers);

it("test", () => {
// redux-mock-store doesnt like the following custom action
store.dispatch(customAction(a, b));
})

я получаю следующую ошибку от jest о redux-mock-store не нравится действие:

ошибка TS2345: Аргумент типа '(отправка: любой) => любой "не может быть назначен параметру типа" AnyAction ". Свойство 'type' отсутствует в типе '(dispatch: any) => any', но требуется для типа 'AnyAction'.

, потому что оно ожидает действия с обычной подписью, в то время как мое пользовательское действие имеет различную подпись для обработки redux middlewares.

Как я могу проверить свои пользовательские действия или, более конкретно, могу ли я получить redux-mock-store, чтобы эти пользовательские действия проходили так, чтобы промежуточное программное обеспечение могло их обрабатывать? Или я делаю что-то еще не так.

...