redux-mock-store getActions returns 空数组
redux-mock-store getActions returns empty array
这是我的动作创作者:
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) 已被调用!
但是不知何故 getActions returns 一个空数组。
请帮我弄清楚原因。
好的,问题是:我没有 return 在动作创建者中承诺。
这是我的 action creator 的更新版本:
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)
});
}
}
是的,我也遇到了同样的问题。我所有的动作创作者都是以这种形式编写的,一个动作创作者不是那种 return 格式。我为此浪费了 2 天时间。
最后我重组了 action creator,它工作正常。
这是我的动作创作者:
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) 已被调用! 但是不知何故 getActions returns 一个空数组。 请帮我弄清楚原因。
好的,问题是:我没有 return 在动作创建者中承诺。 这是我的 action creator 的更新版本:
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)
});
}
}
是的,我也遇到了同样的问题。我所有的动作创作者都是以这种形式编写的,一个动作创作者不是那种 return 格式。我为此浪费了 2 天时间。 最后我重组了 action creator,它工作正常。