я написал небольшой перехватчик с помощью axios
что бы вымывать localBrowserStorage
и будет перенаправлять пользователя на страницу входа, если код ответа является 401. Он отлично работает, но я получение некоторых ошибок в модульном тесте.Мокко: Убедитесь, что сделано() обратного вызова вызывается в этом тесте
Тест
describe('Api Service',() => {
let sandbox;
beforeEach(() => {
moxios.install();
sandbox = sinon.sandbox.create();
});
afterEach(() => {
moxios.uninstall();
sandbox.restore();
});
describe.only('interceptors',() => {
it('clear storage and redirect to login if response status code is 401', (done) => {
moxios.withMock(() => {
sandbox.spy(browserHistory, 'push');
sandbox.spy(storage, 'clear');
axios.get('/test');
moxios.wait(() => {
const request = moxios.requests.mostRecent();
request.respondWith({
status: 401,
response: {}
}).then(() => {
expect(browserHistory.push).to.have.been.calledWith('/login');
expect(storage.clear).to.have.been.called; // eslint-disable-line no-unused-expressions
done();
});
});
});
});
});
});
я получаю эти два предупреждения с этим:
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Request failed with status code 401
(node:5338) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): AssertionError: expected push to have been called with arguments /login
И эта ошибка:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
EDIT:
axios.interceptors.response.use((response) => {
if (response.status === 401) {
storage.clear();
browserHistory.push('/login');
return response;
}
return response;
});
Не могли бы вы объяснить это немного больше, чтобы я полностью понял это для будущих ссылок? Кроме того, выполнение того, что вы сказали, не вызывает «шпионов», и тест терпит неудачу. Какие-либо предложения? – Umair
И он по-прежнему бросает «UnhandledPromiseRejectionWarning» – Umair
@Umair, какой? – robertklep