mirror of
https://github.com/tenrok/axios.git
synced 2026-05-15 11:59:42 +03:00
1c6a86dd2c
* fix: turn AxiosError into a native error (#5394) Being an object returned by the 'Error' constructor turns something into a 'native error'. * fix: simplify code in AxiosError * fix: simplify code in AxiosError * refactor: implement AxiosError as a class * refactor: implement CanceledError as a class This turns CanceledError into a native error. * refactor: simplify AxiosError.toJSON * fix: improve error code handling in `AxiosError.from` If no error code is provided, use the code from the underlying error. * fix: set error status in `AxiosError.constructor` If a response is passed to the constructor, set the response status as a property. * fix: remove unnecessary async --------- Co-authored-by: Jay <jasonsaayman@gmail.com>
70 lines
3.0 KiB
JavaScript
70 lines
3.0 KiB
JavaScript
import AxiosError from '../../../lib/core/AxiosError';
|
|
|
|
|
|
describe('core::AxiosError', function() {
|
|
it('should create an Error with message, config, code, request, response, stack and isAxiosError', function() {
|
|
const request = { path: '/foo' };
|
|
const response = { status: 200, data: { foo: 'bar' } };
|
|
const error = new AxiosError('Boom!', 'ESOMETHING', { foo: 'bar' }, request, response);
|
|
expect(error instanceof Error).toBe(true);
|
|
expect(error.message).toBe('Boom!');
|
|
expect(error.config).toEqual({ foo: 'bar' });
|
|
expect(error.code).toBe('ESOMETHING');
|
|
expect(error.request).toBe(request);
|
|
expect(error.response).toBe(response);
|
|
expect(error.isAxiosError).toBe(true);
|
|
expect(error.stack).toBeDefined();
|
|
});
|
|
it('should create an Error that can be serialized to JSON', function() {
|
|
// Attempting to serialize request and response results in
|
|
// TypeError: Converting circular structure to JSON
|
|
const request = { path: '/foo' };
|
|
const response = { status: 200, data: { foo: 'bar' } };
|
|
const error = new AxiosError('Boom!', 'ESOMETHING', { foo: 'bar' }, request, response);
|
|
const json = error.toJSON();
|
|
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);
|
|
});
|
|
|
|
describe('core::createError.from', function() {
|
|
it('should add config, config, request and response to error', function() {
|
|
const error = new Error('Boom!');
|
|
const request = { path: '/foo' };
|
|
const response = { status: 200, data: { foo: 'bar' } };
|
|
|
|
const axiosError = AxiosError.from(error, 'ESOMETHING', { foo: 'bar' }, request, response);
|
|
expect(axiosError.config).toEqual({ foo: 'bar' });
|
|
expect(axiosError.code).toBe('ESOMETHING');
|
|
expect(axiosError.request).toBe(request);
|
|
expect(axiosError.response).toBe(response);
|
|
expect(axiosError.isAxiosError).toBe(true);
|
|
});
|
|
|
|
it('should return error', function() {
|
|
const error = new Error('Boom!');
|
|
expect(AxiosError.from(error, 'ESOMETHING', { foo: 'bar' }) instanceof AxiosError).toBeTruthy();
|
|
});
|
|
});
|
|
|
|
it('should be a native error as checked by the NodeJS `isNativeError` function', function (){
|
|
if((typeof process !== 'undefined') && (process.release.name === 'node')){
|
|
let {isNativeError} = require('node:util/types');
|
|
expect(isNativeError(new AxiosError("My Axios Error"))).toBeTruthy();
|
|
}
|
|
});
|
|
|
|
it('should create an error using one of the static class properties as an error code', function (){
|
|
const myError = new AxiosError("My Axios Error", AxiosError.ECONNABORTED);
|
|
expect(myError.code).toEqual(AxiosError.ECONNABORTED);
|
|
});
|
|
|
|
it('should have status property when response was passed to the constructor', () => {
|
|
const err = new AxiosError('test', 'foo', {}, {}, {status: 400});
|
|
expect(err.status).toBe(400);
|
|
});
|
|
});
|