redux-mock-store getActions возвращает пустой массив

Это мой создатель действий:

export function signinUser({login, password}){  

    return function(dispatch){      
        axios.post('/auth/signin', {login, password})
            .then((response)=>{             
                //-update state to indicate user is authenticated
                var {username, userid, token} = response.data;
                dispatch(authUser(token, username, userid));                
                console.log(1)
            })
            .catch(()=>{
                //- show error message
                dispatch(setErrorMessage('Bad Login Info'));                                
                console.log(2)
            });
    }   
}

Тест:

 describe('signinUser', ()=>{

    var {signinUser} = actions;
    var arg;

    beforeEach(() => {
        arg = {
            login: 'john',
            password: '123'
        }           
    });

    afterEach(function () {
        nock.cleanAll()
    });

    it('should call setErrorMessage', ()=>{     

        nock('http://localhost:5000/auth/signin').post('')              
            .reply(401)         

        var expectedActions = [
            {
                type: 'SET_ERROR',
                payload: 'Bad Login Info'
            }
        ];

        var store = mockStore({});          
        store.dispatch(signinUser({...arg}));
        expect(store.getActions()).to.equal(expectedActions)
    });    

Выход:

2
AssertionError: expected [] to equal [ Array(1) ]

Что означает - создатель действия был вызван - и console.log(2) в catch был вызван! Но так или иначе getActions возвращает пустой массив. Пожалуйста, помогите мне понять, почему.

1 ответ

Решение

Хорошо, проблема была: я не вернул обещание создателю действия. Вот обновленная версия моего создателя действия:

export function signinUser({login, password}){  
    //you have to return this one
    return function(dispatch){      
        return axios.post('/auth/signin', {login, password})
            .then((response)=>{             
                //-update state to indicate user is authenticated
                var {username, userid, token} = response.data;
                dispatch(authUser(token, username, userid));                
                console.log(1)
            })
            .catch(()=>{
                //- show error message
                dispatch(setErrorMessage('Bad Login Info'));                                
                console.log(2)
            });
    }   
}

Да, я тоже столкнулся с той же проблемой. Весь мой создатель действий был написан в этой форме, а один создатель отдельного действия не был в этом формате возврата. Я потратил на это 2 дня. Наконец, я реструктурировал создателя действий, и он работает нормально.

Другие вопросы по тегам