Я пытаюсь проверить эту функцию:
function login(username, password) {
let user = { userName: username, password: password };
return dispatch => {
localStorageService.login(username, password).then((response) => {
dispatch(resetError());
dispatch(success( { type: userConstants.LOGIN, user} ));
}, (err) => {
dispatch(error(err));
});
};
function success(user) { return { type: userConstants.LOGIN, payload: user } };
};
Вот мой тест
const mockStore = configureStore([thunk]);
const initialState = {
userReducer: {
loggedInUser: "",
users: [],
error: ""
}
};
const store = mockStore(initialState);
jest.mock('./../../services/localStorageService');
describe("Login action should call localstorage login", () => {
let localStorage_spy = jest.spyOn(localStorageService, 'login');
store.dispatch(userActions.login(test_data.username, test_data.password)()).then( () => {
expect(localStorage_spy).toHaveBeenCalled();
});
});
Я получаю ошибку:
Actions must be plain objects. Use custom middleware for async actions.
Множество ресурсов в Интернете постоянно говорят мне, чтобы я использовал thunk в моем тесте для этих действий, но он не работает. Последнее, что он вызывает, это dispatch(resetError());
, и оно ломается. Я никогда не находил в Интернете ресурс, достаточно похожий на мою проблему. Моя функция возвращает отправку, которая возвращает обещание, которое возвращает другую отправку, когда обещание разрешается. Я просто пытаюсь вернуть функцию. Я поместил шпиона в localStorageService.login, а также издевался над ним, и у меня есть надежда, что он будет вызван. Но, конечно, функция не возвращает