2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-17 19:21:29 +03:00
Files
axios/tests/unit/api.test.js
T
Pierluigi Lenoci f39203dcbe feat: add QUERY HTTP method support (#10802)
* 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>
2026-04-28 14:28:30 +02:00

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');
});
});