Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding HTTP status code to error.toJSON #2956

Merged
merged 9 commits into from Sep 5, 2021
3 changes: 2 additions & 1 deletion lib/core/enhanceError.js
Expand Up @@ -35,7 +35,8 @@ module.exports = function enhanceError(error, config, code, request, response) {
stack: this.stack,
// Axios
config: this.config,
code: this.code
code: this.code,
status: this.response && this.response.status ? this.response.status : null
};
};
return error;
Expand Down
10 changes: 9 additions & 1 deletion sandbox/client.html
Expand Up @@ -5,7 +5,6 @@
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"/>
<style type="text/css">
pre {
max-height: 200px;
min-height: 39px;
overflow: auto;
}
Expand Down Expand Up @@ -58,6 +57,11 @@ <h3>Response</h3>
<pre id="response">No Data</pre>
</div>

<div class="well">
<h3>Error</h3>
<pre id="error">None</pre>
</div>

<script src="/axios.js"></script>
<script>
(function () {
Expand All @@ -81,6 +85,7 @@ <h3>Response</h3>
var submit = document.getElementById('submit');
var request = document.getElementById('request');
var response = document.getElementById('response');
var error = document.getElementById('error');

function acceptsData(method) {
return ['PATCH', 'POST', 'PUT'].indexOf(method) > -1;
Expand Down Expand Up @@ -138,8 +143,11 @@ <h3>Response</h3>
axios(options)
.then(function (res) {
response.innerHTML = JSON.stringify(res.data, null, 2);
error.innerHTML = "None";
})
.catch(function (res) {
error.innerHTML = JSON.stringify(res.toJSON(), null, 2)
console.error('Axios caught an error from request', res.toJSON());
response.innerHTML = JSON.stringify(res.data, null, 2);
});
};
Expand Down
1 change: 1 addition & 0 deletions test/specs/core/createError.spec.js
Expand Up @@ -23,6 +23,7 @@ describe('core::createError', function() {
expect(json.message).toBe('Boom!');
expect(json.config).toEqual({ foo: 'bar' });
expect(json.code).toBe('ESOMETHING');
expect(json.status).toBe(200);
expect(json.request).toBe(undefined);
expect(json.response).toBe(undefined);
});
Expand Down
12 changes: 11 additions & 1 deletion test/specs/core/enhanceError.spec.js
@@ -1,7 +1,7 @@
var enhanceError = require('../../../lib/core/enhanceError');

describe('core::enhanceError', function() {
it('should add config, config, request and response to error', function() {
it('should add config, code, request, response, and toJSON function to error', function() {
var error = new Error('Boom!');
var request = { path: '/foo' };
var response = { status: 200, data: { foo: 'bar' } };
Expand All @@ -11,9 +11,19 @@ describe('core::enhanceError', function() {
expect(error.code).toBe('ESOMETHING');
expect(error.request).toBe(request);
expect(error.response).toBe(response);
expect(typeof error.toJSON).toBe('function');
expect(error.isAxiosError).toBe(true);
});

it('should serialize to JSON with a status of null when there is no response', function() {
var error = new Error('Boom!');
var request = { path: '/foo' };
var response = undefined;

var errorAsJson = enhanceError(error, { foo: 'bar' }, 'ESOMETHING', request, response).toJSON();
expect(errorAsJson.status).toEqual(null);
});

it('should return error', function() {
var error = new Error('Boom!');
expect(enhanceError(error, { foo: 'bar' }, 'ESOMETHING')).toBe(error);
Expand Down