javascript - redux-mock-store getActions 返回空数组

标签 javascript reactjs redux nock redux-mock-store

这是我的 Action 创建者:

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

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

最佳答案

好吧,问题是:我没有在 Action 创建者中返回 promise 。 这是我的 Action 创建器的更新版本:

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)
            });
    }   
}

关于javascript - redux-mock-store getActions 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185352/

相关文章:

css - 如何删除 material-ui 的可滚动选项卡中的额外空间?

php - 如果没有从下拉列表中选择值,允许文本框使用 php、mysql、javascript 添加到 mysql 表

reactjs - gatsby graphql 查询中的变量 slug 来自哪里?

javascript - 检查文本的最小长度并使用 JS 更改某个 <span>?

javascript - 从 DOM 中删除元素时保持 reactjs 元素状态

javascript - rc-calendar 显示内部 react 组件

javascript - Angular2 + ngrx/存储 : how to change state within a loop?

reactjs - 元素类型无效 : expected a string (for built-in components) or a class/function

javascript - 如何在字符串中使用双引号而不用 Internet Explorer 修改它们?

javascript - 为什么“"click, "按钮”由跨度处理?