我在axios
react
应用中使用redux
来进行api通话。我添加了这个拦截器来拦截所有api调用的响应,并在状态代码为401时将用户重定向到登录。
axios.interceptors.response.use((response) => {
if (response.status === 401) {
browserHistory.push('/login');
}
return response;
});
我正在对此进行单元测试,并在browserHistory
间谍上断言要调用,但我不确定为什么我的测试会一直失败。经过大量尝试后,我有点陷入困境,无法解决问题。我使用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);
});
});
});
});
任何形式的资源或指南都会非常感激。我很确定我在这里遗漏了一些东西。
答案 0 :(得分:0)
根据文档,您需要监视承诺,
目前如下,
axios.get('/test');
但是你需要像下面那样窥探它,
let onFulfilled = sinon.spy()
axios.get('/test').then(onFulfilled)