Axios 实例模块单元测试
# Axios 实例模块单元测试
ts-axios
提供了 axios.create
静态方法,返回一个 instance
实例,我们需要对这个模块做测试。
# 测试代码编写
test/instance.spec.ts
:
import axios, { AxiosRequestConfig, AxiosResponse } from '../src/index'
import { getAjaxRequest } from './helper'
describe('instance', () => {
beforeEach(() => {
jasmine.Ajax.install()
})
afterEach(() => {
jasmine.Ajax.uninstall()
})
test('should make a http request without verb helper', () => {
const instance = axios.create()
instance('/foo')
return getAjaxRequest().then(request => {
expect(request.url).toBe('/foo')
})
})
test('should make a http request', () => {
const instance = axios.create()
instance.get('/foo')
return getAjaxRequest().then(request => {
expect(request.url).toBe('/foo')
expect(request.method).toBe('GET')
})
})
test('should make a post request', () => {
const instance = axios.create()
instance.post('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('POST')
})
})
test('should make a put request', () => {
const instance = axios.create()
instance.put('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('PUT')
})
})
test('should make a patch request', () => {
const instance = axios.create()
instance.patch('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('PATCH')
})
})
test('should make a options request', () => {
const instance = axios.create()
instance.options('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('OPTIONS')
})
})
test('should make a delete request', () => {
const instance = axios.create()
instance.delete('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('DELETE')
})
})
test('should make a head request', () => {
const instance = axios.create()
instance.head('/foo')
return getAjaxRequest().then(request => {
expect(request.method).toBe('HEAD')
})
})
test('should use instance options', () => {
const instance = axios.create({ timeout: 1000 })
instance.get('/foo')
return getAjaxRequest().then(request => {
expect(request.timeout).toBe(1000)
})
})
test('should have defaults.headers', () => {
const instance = axios.create({ baseURL: 'https://api.example.com' })
expect(typeof instance.defaults.headers).toBe('object')
expect(typeof instance.defaults.headers.common).toBe('object')
})
test('should have interceptors on the instance', done => {
axios.interceptors.request.use(config => {
config.timeout = 2000
return config
})
const instance = axios.create()
instance.interceptors.request.use(config => {
config.withCredentials = true
return config
})
let response: AxiosResponse
instance.get('/foo').then(res => {
response = res
})
getAjaxRequest().then(request => {
request.respondWith({
status: 200
})
setTimeout(() => {
expect(response.config.timeout).toEqual(0)
expect(response.config.withCredentials).toEqual(true)
done()
}, 100)
})
})
test('should get the computed uri', () => {
const fakeConfig: AxiosRequestConfig = {
baseURL: 'https://www.baidu.com/',
url: '/user/12345',
params: {
idClient: 1,
idTest: 2,
testString: 'thisIsATest'
}
}
expect(axios.getUri(fakeConfig)).toBe(
'https://www.baidu.com/user/12345?idClient=1&idTest=2&testString=thisIsATest'
)
})
})
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
156
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
156
至此我们完成了 ts-axios
库 Axios
实例模块相关业务逻辑的测试,下一节课我们会对拦截器模块做测试。