单元测试拦截器(axios)

Uma*_*raz 5 unit-testing http mocha.js sinon axios

axios用于react redux应用程序中的 api 调用。我添加了这个拦截器来拦截所有 api 调用的响应,并在状态码为 401 时重定向用户登录。

axios.interceptors.response.use((response) => {
  if (response.status === 401) {
    browserHistory.push('/login');
  }
  return response;
});
Run Code Online (Sandbox Code Playgroud)

我正在对此进行单元测试并断言browserHistoryspy 被调用,但我不确定为什么我的测试一直失败。经过大量尝试后,我有点卡住了,无法解决问题。我moxios用于嘲笑响应。

测试

let sandbox;

  beforeEach(() => {
    moxios.install();
    sandbox = sinon.sandbox.create();
  });

  afterEach(() => {
    moxios.uninstall();
    sandbox.restore();
  });

  describe('interceptors', () => {
    it('should redirect to login if response status code is 401', (done) => {
      moxios.withMock(() => {
        sandbox.spy(browserHistory, 'push');

        axios.get('/test');

        moxios.wait(() => {
          const request = moxios.requests.mostRecent();
          request.respondWith({
            status: 401,
            response: {}
          }).then(() => {
            expect(browserHistory.push).to.have.been.called; // Fails
            done();
          }).catch(done);
        });
      });
    });
});
Run Code Online (Sandbox Code Playgroud)

任何类型的资源或指南将不胜感激。我很确定我在这里遗漏了一些东西。