Как смоделировать асинхронные действия - PullRequest
3 голосов
/ 02 июля 2019

Я пытаюсь проверить эту функцию:

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, а также издевался над ним, и у меня есть надежда, что он будет вызван. Но, конечно, функция не возвращает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...