反应摩卡测试道具。历史

时间:2019-02-26 19:06:58

标签: reactjs unit-testing mocha nock

我正在尝试使用mocha和nock测试一个函数,但出现错误:无法读取数据中未定义的属性'data'

这是我的代码

测试方法:

export const registerUser = (userData, history) => dispatch => {
  axios
    .post("/api/v3/user", userData)
    .then( res => {      
      history.push("/login")
      return res;
    }) 
.catch(err =>
  dispatch({
    type: GET_ERRORS,
    payload: err.response.data
  })
);
};

测试:

describe('Post registerUser', () => {    
beforeEach(() => {
  nock('http://localhost')
    .post('/api/v3/user', userData )
    .reply(200, registerResponseValide);
});

it('Register valide', () => {
    const dispatchSpy = sinon.spy();
     return registerUser(userData, history)(dispatchSpy)
      .then(response => {
        //expect an object back
        expect(typeof response).to.equal('object');
        expect(response.data.id).to.equal(registerResponseValide().id)
      })
  });
});

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

registerUser的问题在于它没有返回承诺,这使测试更加复杂。

应该是:

export const registerUser = (userData, history) => dispatch => {
  return axios...
};

history.push应该是存根:

const history = { push: sinon.stub() };
return registerUser(userData, history)(dispatchSpy)...

然后可以测试是否使用正确的参数调用了它。