mirror of
https://github.com/tenrok/axios.git
synced 2026-06-17 19:21:29 +03:00
f39203dcbe
* feat: add QUERY HTTP method support Add support for the HTTP QUERY method as defined in draft-ietf-httpbis-safe-method-w-body. QUERY is a safe, idempotent method like GET but carries a request body, making it suitable for complex queries that cannot be expressed in a URL. Changes: - Add axios.query(url, data, config) and axios.queryForm() shorthands - Register 'query' in default headers initialization - Include 'query' in header cleanup during request dispatch - Add 'QUERY' to Method type in TypeScript definitions (d.ts and d.cts) - Add query/queryForm signatures to Axios class type definitions - Add 'query' to HeadersDefaults interface - Update unit and module typing tests Closes #5465 Signed-off-by: Pierluigi Lenoci <pierluigilenoci@gmail.com> * test: add thorough QUERY method tests Add comprehensive tests for the QUERY HTTP method covering: - Request method correctness (via mock adapter and real HTTP server) - Request body support (QUERY accepts a body like POST/PUT/PATCH) - Custom headers handling - baseURL configuration with instances - Content-Type auto-detection (application/json for objects) - Instance method and defaults merging - Generic request form axios({ method: 'query' }) - queryForm() multipart/form-data support - Integration tests against a real HTTP server verifying the QUERY method string arrives correctly on the wire Signed-off-by: Pierluigi Lenoci <pierluigilenoci@gmail.com> * chore: updated docs with all translations * chore: drop formquery method as this is probably not a real use case * chore: remove un-needed file --------- Signed-off-by: Pierluigi Lenoci <pierluigilenoci@gmail.com> Co-authored-by: Jay <jasonsaayman@gmail.com>
105 lines
3.5 KiB
JavaScript
105 lines
3.5 KiB
JavaScript
import { describe, it } from 'vitest';
|
|
import assert from 'assert';
|
|
import axios, { create } from '../../index.js';
|
|
|
|
describe('static api', () => {
|
|
it('should have request method helpers', () => {
|
|
assert.strictEqual(typeof axios.request, 'function');
|
|
assert.strictEqual(typeof axios.get, 'function');
|
|
assert.strictEqual(typeof axios.head, 'function');
|
|
assert.strictEqual(typeof axios.options, 'function');
|
|
assert.strictEqual(typeof axios.delete, 'function');
|
|
assert.strictEqual(typeof axios.post, 'function');
|
|
assert.strictEqual(typeof axios.put, 'function');
|
|
assert.strictEqual(typeof axios.patch, 'function');
|
|
assert.strictEqual(typeof axios.query, 'function');
|
|
});
|
|
|
|
it('should have promise method helpers', async () => {
|
|
const promise = axios.request({
|
|
url: '/test',
|
|
adapter: (config) =>
|
|
Promise.resolve({
|
|
data: null,
|
|
status: 200,
|
|
statusText: 'OK',
|
|
headers: {},
|
|
config,
|
|
request: {},
|
|
}),
|
|
});
|
|
|
|
assert.strictEqual(typeof promise.then, 'function');
|
|
assert.strictEqual(typeof promise.catch, 'function');
|
|
|
|
await promise;
|
|
});
|
|
|
|
it('should have defaults', () => {
|
|
assert.strictEqual(typeof axios.defaults, 'object');
|
|
assert.strictEqual(typeof axios.defaults.headers, 'object');
|
|
});
|
|
|
|
it('should have interceptors', () => {
|
|
assert.strictEqual(typeof axios.interceptors.request, 'object');
|
|
assert.strictEqual(typeof axios.interceptors.response, 'object');
|
|
});
|
|
|
|
it('should have all/spread helpers', () => {
|
|
assert.strictEqual(typeof axios.all, 'function');
|
|
assert.strictEqual(typeof axios.spread, 'function');
|
|
});
|
|
|
|
it('should have factory method', () => {
|
|
assert.strictEqual(typeof axios.create, 'function');
|
|
});
|
|
|
|
it('should expose create as a named export', () => {
|
|
assert.strictEqual(typeof create, 'function');
|
|
assert.strictEqual(create, axios.create);
|
|
});
|
|
|
|
it('should have CanceledError, CancelToken, and isCancel properties', () => {
|
|
assert.strictEqual(typeof axios.Cancel, 'function');
|
|
assert.strictEqual(typeof axios.CancelToken, 'function');
|
|
assert.strictEqual(typeof axios.isCancel, 'function');
|
|
});
|
|
|
|
it('should have getUri method', () => {
|
|
assert.strictEqual(typeof axios.getUri, 'function');
|
|
});
|
|
|
|
it('should have isAxiosError properties', () => {
|
|
assert.strictEqual(typeof axios.isAxiosError, 'function');
|
|
});
|
|
|
|
it('should have mergeConfig properties', () => {
|
|
assert.strictEqual(typeof axios.mergeConfig, 'function');
|
|
});
|
|
|
|
it('should have getAdapter properties', () => {
|
|
assert.strictEqual(typeof axios.getAdapter, 'function');
|
|
});
|
|
});
|
|
|
|
describe('instance api', () => {
|
|
const instance = axios.create();
|
|
|
|
it('should have request methods', () => {
|
|
assert.strictEqual(typeof instance.request, 'function');
|
|
assert.strictEqual(typeof instance.get, 'function');
|
|
assert.strictEqual(typeof instance.options, 'function');
|
|
assert.strictEqual(typeof instance.head, 'function');
|
|
assert.strictEqual(typeof instance.delete, 'function');
|
|
assert.strictEqual(typeof instance.post, 'function');
|
|
assert.strictEqual(typeof instance.put, 'function');
|
|
assert.strictEqual(typeof instance.patch, 'function');
|
|
assert.strictEqual(typeof instance.query, 'function');
|
|
});
|
|
|
|
it('should have interceptors', () => {
|
|
assert.strictEqual(typeof instance.interceptors.request, 'object');
|
|
assert.strictEqual(typeof instance.interceptors.response, 'object');
|
|
});
|
|
});
|