2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-02 16:04:10 +03:00

Allow custom HTTP status code error ranges (#308)

Adding support for custom HTTP status code error ranges
This commit is contained in:
Nick Uraltsev
2016-04-26 13:18:58 -07:00
committed by Matt Zabriskie
parent 093593cbca
commit fa9444e0ba
7 changed files with 169 additions and 17 deletions
+75
View File
@@ -0,0 +1,75 @@
var settle = require('../../../lib/helpers/settle');
describe('helpers::settle', function() {
var resolve;
var reject;
beforeEach(function() {
resolve = jasmine.createSpy('resolve');
reject = jasmine.createSpy('reject');
});
it('should resolve promise if status is not set', function() {
var response = {
config: {
validateStatus: function() {
return true;
}
}
};
settle(resolve, reject, response);
expect(resolve).toHaveBeenCalledWith(response);
expect(reject).not.toHaveBeenCalled();
});
it('should resolve promise if validateStatus is not set', function() {
var response = {
status: 500,
config: {
}
};
settle(resolve, reject, response);
expect(resolve).toHaveBeenCalledWith(response);
expect(reject).not.toHaveBeenCalled();
});
it('should resolve promise if validateStatus returns true', function() {
var response = {
status: 500,
config: {
validateStatus: function() {
return true;
}
}
};
settle(resolve, reject, response);
expect(resolve).toHaveBeenCalledWith(response);
expect(reject).not.toHaveBeenCalled();
});
it('should reject promise if validateStatus returns false', function() {
var response = {
status: 500,
config: {
validateStatus: function() {
return false;
}
}
};
settle(resolve, reject, response);
expect(resolve).not.toHaveBeenCalled();
expect(reject).toHaveBeenCalledWith(response);
});
it('should pass status to validateStatus', function() {
var validateStatus = jasmine.createSpy('validateStatus');
var response = {
status: 500,
config: {
validateStatus: validateStatus
}
};
settle(resolve, reject, response);
expect(validateStatus).toHaveBeenCalledWith(500);
});
});
+48 -2
View File
@@ -55,6 +55,52 @@ describe('requests', function () {
.then(finish, finish);
});
it('should reject when validateStatus returns false', function (done) {
var resolveSpy = jasmine.createSpy('resolve');
var rejectSpy = jasmine.createSpy('reject');
axios('/foo', {
validateStatus: function (status) {
return status !== 500;
}
}).then(resolveSpy)
.catch(rejectSpy)
.then(function () {
expect(resolveSpy).not.toHaveBeenCalled();
expect(rejectSpy).toHaveBeenCalled();
done();
});
getAjaxRequest().then(function (request) {
request.respondWith({
status: 500
});
});
});
it('should resolve when validateStatus returns true', function (done) {
var resolveSpy = jasmine.createSpy('resolve');
var rejectSpy = jasmine.createSpy('reject');
axios('/foo', {
validateStatus: function (status) {
return status === 500;
}
}).then(resolveSpy)
.catch(rejectSpy)
.then(function () {
expect(resolveSpy).toHaveBeenCalled();
expect(rejectSpy).not.toHaveBeenCalled();
done();
});
getAjaxRequest().then(function (request) {
request.respondWith({
status: 500
});
});
});
it('should make cross domian http request', function (done) {
var response;
@@ -71,7 +117,7 @@ describe('requests', function () {
'Content-Type': 'application/json'
}
});
setTimeout(function () {
expect(response.data.foo).toEqual('bar');
expect(response.status).toEqual(200);
@@ -200,7 +246,7 @@ describe('requests', function () {
done();
return;
}
var response;
function str2ab(str) {