axios-axios/test/unit/core/Axios.js

54 lines
1.7 KiB
JavaScript

import Axios from "../../../lib/core/Axios.js";
import assert from "assert";
describe('Axios', function () {
describe("handle un-writable error stack", function () {
async function testUnwritableErrorStack(stackAttributes) {
const axios = new Axios({});
// mock axios._request to return an Error with an un-writable stack property
axios._request = () => {
const mockError = new Error("test-error");
Object.defineProperty(mockError, "stack", stackAttributes);
throw mockError;
}
try {
await axios.request("test-url", {})
} catch (e) {
assert.strictEqual(e.message, "test-error")
}
}
it('should support errors with a defined but un-writable stack', async function () {
await testUnwritableErrorStack({value: {}, writable: false})
});
it('should support errors with an undefined and un-writable stack', async function () {
await testUnwritableErrorStack({value: undefined, writable: false})
});
it('should support errors with a custom getter/setter for the stack property', async function () {
await testUnwritableErrorStack({
get: () => ({}),
set: () => {
throw new Error('read-only');
}
})
});
it('should support errors with a custom getter/setter for the stack property (null case)', async function () {
await testUnwritableErrorStack({
get: () => null,
set: () => {
throw new Error('read-only');
}
})
});
});
it('should not throw if the config argument is omitted', () => {
const axios = new Axios();
assert.deepStrictEqual(axios.defaults, {});
});
});