axios-miniprogram/test/core/flattenHeaders.test.ts

85 lines
2.1 KiB
TypeScript
Raw Normal View History

2023-04-03 21:03:33 +08:00
import { describe, test, expect } from 'vitest';
2023-04-09 15:20:10 +08:00
import { flattenHeaders } from '@/core/flattenHeaders';
import Axios from '@/core/Axios';
2023-04-03 21:03:33 +08:00
describe('src/core/flattenHeaders.ts', () => {
const keys = [...Axios.as, ...Axios.asp, ...Axios.asd];
2023-04-14 18:16:39 +08:00
const baseHeaders = Object.fromEntries(
keys.map((k) => [k, { v1: `${k}1`, v2: `${k}2` }]),
) as unknown as Record<(typeof keys)[number], AnyObject>;
2023-04-03 21:03:33 +08:00
test('应该支持空配置', () => {
expect(flattenHeaders({})).toBeUndefined();
});
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 };
keys.forEach((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 };
keys.forEach((a) => {
expect(flattenHeaders({ headers: h1, method: a })).toEqual(h1.common);
expect(flattenHeaders({ headers: h2, method: a })).toEqual(h2[a]);
});
});
test.each(
keys.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`,
};
keys.forEach((a) => {
expect(flattenHeaders({ headers: h, method: a })).toEqual(
a !== k ? h1 : h2,
);
});
});
});