84 lines
2.0 KiB
TypeScript
84 lines
2.0 KiB
TypeScript
import { describe, test, expect } from 'vitest';
|
||
import { eachMethods, methods } from 'scripts/test.utils';
|
||
import { flattenHeaders } from '@/request/flattenHeaders';
|
||
|
||
describe('src/request/flattenHeaders.ts', () => {
|
||
const baseHeaders = Object.fromEntries(
|
||
methods.map((k) => [k, { v1: `${k}1`, v2: `${k}2` }]),
|
||
) as unknown as Record<(typeof methods)[number], AnyObject>;
|
||
|
||
test('应该支持空配置', () => {
|
||
expect(flattenHeaders({})).toEqual({});
|
||
});
|
||
|
||
test('应该支持自定义 headers', () => {
|
||
const h = {
|
||
v1: '1',
|
||
v2: '2',
|
||
};
|
||
expect(flattenHeaders({ headers: h, method: 'get' })).toEqual(h);
|
||
});
|
||
|
||
test('应该支持别名 headers,并且自定义 headers 优先级应该高于别名 headers', () => {
|
||
const h1 = baseHeaders;
|
||
const h2 = { v1: 1, v2: 2 };
|
||
const h3 = { ...h1, ...h2 };
|
||
|
||
eachMethods((a) => {
|
||
expect(flattenHeaders({ headers: h1, method: a })).toEqual(h1[a]);
|
||
expect(flattenHeaders({ headers: h3, method: a })).toEqual(h2);
|
||
});
|
||
});
|
||
|
||
test('应该支持通用 headers,并且别名 headers 优先级应该高于通用 headers', () => {
|
||
const h1 = {
|
||
common: {
|
||
v1: 'common1',
|
||
v2: 'common2',
|
||
},
|
||
};
|
||
const h2 = { ...baseHeaders, ...h1 };
|
||
|
||
eachMethods((a) => {
|
||
expect(flattenHeaders({ headers: h1, method: a })).toEqual(h1.common);
|
||
expect(flattenHeaders({ headers: h2, method: a })).toEqual(h2[a]);
|
||
});
|
||
});
|
||
|
||
test.each(
|
||
methods.map((k) => [
|
||
k,
|
||
{
|
||
common: {
|
||
v1: 'common1',
|
||
v2: 'common1',
|
||
},
|
||
[k]: {
|
||
v3: `${k}1`,
|
||
v4: `${k}2`,
|
||
},
|
||
v5: 5,
|
||
v6: 6,
|
||
},
|
||
]),
|
||
)('应该获取到完整的 %s headers', (k, h) => {
|
||
const h1 = {
|
||
v1: 'common1',
|
||
v2: 'common1',
|
||
v5: 5,
|
||
v6: 6,
|
||
};
|
||
const h2 = {
|
||
...h1,
|
||
v3: `${k}1`,
|
||
v4: `${k}2`,
|
||
};
|
||
|
||
eachMethods((a) => {
|
||
expect(flattenHeaders({ headers: h, method: a })).toEqual(
|
||
a !== k ? h1 : h2,
|
||
);
|
||
});
|
||
});
|
||
});
|