request-pre
Version:
process format data before request send
89 lines (88 loc) • 2.54 kB
text/typescript
import Service from '../src/index';
import methods from '../src/methods';
const apiSchemaList = {
list: {
url: {
path: '/a/b',
method: methods.GET,
query: {
search: 1,
},
},
mock: {
'list.success': {
success: true,
data: (): any[] => [],
},
'list.fail': {
success: false,
data: [],
},
},
},
detail: {
url: {
path: '/a/b',
method: methods.POST,
query: {
search: 1,
},
body: {
id: 1,
},
},
},
};
test('middleware', (): void => {
const service = new Service(function ({ config, url, mock }): Promise<object> {
return Promise.resolve({
config, url, mock
});
}).generator(apiSchemaList);
service.list({
config: {
mock: 'list.success',
},
}).then((data): void => {
expect(data.url.headers['Content-Type']).toStrictEqual('application/json;charset=UTF-8');
});
const service2 = new Service(function ({ config, url, mock }): Promise<object> {
return Promise.resolve({
config, url, mock
});
}).generator(apiSchemaList, null, {
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
});
service2.list({
config: {
mock: 'list.success',
requestType: 'form',
},
}).then((data): void => {
expect(data.url.headers['Content-Type']).toStrictEqual('application/x-www-form-urlencoded;charset=UTF-8');
});
});
test('custom middleware', (): void => {
const serviceGenerator = new Service(function ({ config, url, mock }): Promise<object> {
return Promise.resolve({
config, url, mock
});
});
const service = serviceGenerator.generator(apiSchemaList, null, {
config: {
custom: 'addHeader',
},
});
serviceGenerator.use(async function (apiSchema, next): Promise<any> {
if (apiSchema.config.custom === 'addHeader') {
const headers = apiSchema.url.headers = apiSchema.url.headers || {};
headers.addHeader = 'addHeader';
}
return await next();
});
service.list().then((data): void => {
expect(data.url.headers['addHeader']).toStrictEqual('addHeader');
});
});