【问题标题】:redux-mock-store getActions returns empty arrayredux-mock-store getActions 返回空数组
【发布时间】:2017-06-30 08:01:43
【问题描述】:

这是我的动作创建者:

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) ]

这意味着 - 动作创建者已被调用 - 并且 catch 中的 console.log(2) 已被调用! 但不知何故 getActions 返回一个空数组。 请帮我找出原因。

【问题讨论】:

    标签: javascript reactjs redux nock redux-mock-store


    【解决方案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】:

      是的,我也面临同样的问题。我所有的动作创建者都是以这种形式编写的,而一个单一的动作创建者不是那种返回格式。我为此浪费了 2 天时间。 最后我重组了动作创建器,它工作正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-29
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        • 2019-10-16
        • 2017-03-26
        • 1970-01-01
        相关资源
        最近更新 更多