-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecorators.spec.ts
155 lines (132 loc) · 4.2 KB
/
decorators.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import Mock from 'mockjs';
import {
Get,
Post,
Put,
Delete,
Response,
requestConfig,
Exception,
Params,
createMethodDecorator,
HttpResponse,
Config,
RequestConfig,
} from '../lib';
type o = Record<string, any>;
const Patch = createMethodDecorator('PATCH');
const template = {
errcode: 0,
errmsg: 'ok',
data: { list: ['front end', 'back end'] },
};
Mock.mock('https://mock.api.com/get/list', 'get', template);
Mock.mock('https://mock.api.com/post/list', 'post', template);
Mock.mock('https://mock.api.com/put/list', 'put', template);
Mock.mock('https://mock.api.com/delete/list', 'delete', template);
Mock.mock('https://mock.api.com/patch/list', 'patch', template);
Mock.mock(RegExp('https://mock.api.com/get-with-params.*'), 'get', (opt: o) => opt);
Mock.mock(RegExp('https://mock.api.com/post-with-params.*'), 'post', (opt: o) => opt);
Mock.mock(RegExp('https://mock.api.com/get/config.*'), 'get', (opt: o) => opt);
requestConfig.set({ baseURL: 'https://mock.api.com' });
class Request {
@Get('/get/list')
fetchList(@Response res?: HttpResponse, @Exception e?: unknown) {
return res;
}
@Post('/post/list')
postList(@Response res?: HttpResponse) {
return res;
}
@Put('/put/list')
putList(@Response res?: HttpResponse) {
return res;
}
@Delete('/delete/list')
deleteList(@Response res?: HttpResponse) {
return res;
}
@Patch('/patch/list')
patchList(@Response res?: HttpResponse) {
return res;
}
@Get('/error/api')
fetchError(@Exception e?: unknown, @Response res?: HttpResponse) {
return [e, res];
}
@Get('/get-with-params')
@Params({ hello: 'world' })
getWithParams(@Params params: o, @Response res?: HttpResponse) {
return res;
}
@Post('/post-with-params')
@Params({ hello: 'world' })
postWithParams(@Params params: o, @Response res?: HttpResponse) {
return res;
}
@Get('/get/config')
@Config({ params: { foo: 1, bar: 2 } })
getConfig(
@Params params: o,
@Config config: RequestConfig,
@Response res?: HttpResponse,
) {
return res;
}
}
const request = new Request();
describe('test decorators', () => {
it('test Get decorator', async () => {
const res = await request.fetchList();
expect(res).toBeDefined();
expect(res?.data?.errcode).toBe(0);
expect(res?.data?.data.list).toContain('back end');
});
it('test Post decorator', async () => {
const res: o | undefined = await request.postList();
expect(res).toBeDefined();
expect(res?.data?.errcode).toBe(0);
expect(res?.data?.data.list).toContain('back end');
});
it('test Put decorator', async () => {
const res: o | undefined = await request.putList();
expect(res).toBeDefined();
expect(res?.data?.errcode).toBe(0);
expect(res?.data?.data.list).toContain('back end');
});
it('test Delete decorator', async () => {
const res: o | undefined = await request.deleteList();
expect(res).toBeDefined();
expect(res?.data?.errcode).toBe(0);
expect(res?.data?.data.list).toContain('back end');
});
it('test custom method decorator', async () => {
const res: o | undefined = await request.patchList();
expect(res).toBeDefined();
expect(res?.data?.errcode).toBe(0);
expect(res?.data?.data.list).toContain('back end');
});
it('test get api width params', async () => {
const res: o | undefined = await request.getWithParams({ foo: 'bar' });
expect(res?.data?.url).toMatch('foo=bar');
expect(res?.data?.url).toMatch('hello=world');
});
it('test post api width params', async () => {
const res: o | undefined = await request.postWithParams({ foo: 'bar' });
expect(res?.data?.body).toMatch('"foo":"bar"');
expect(res?.data?.body).toMatch('"hello":"world"');
});
it('test Config decorator', async () => {
const res = await request.getConfig({ bar: 666 }, { headers: { foo: 'bar' } });
expect(res?.config.params.foo).toBe(1);
expect(res?.config.params.bar).toBe(666);
expect(res?.config.headers.foo).toBe('bar');
});
// passed test
// it('test Exception decorator', async () => {
// const [e, res] = await request.fetchError();
// console.log(e);
// expect(e instanceof Error).toBeTruthy();
// expect(res).toBeUndefined();
// });
});