2017-02-12 2 views
1

Это мое действие Создатель:перевождь-макет магазин 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) 
      }); 
    } 
} 
Смежные вопросы