-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathclient.test.js
56 lines (49 loc) · 1.65 KB
/
client.test.js
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
import XMLHttpRequest from '../src/client/xhr'
import { run } from './modules/mock-http.js'
import '../demo/client_preview/src/utils/mockClient'
http.axios = {}
'get,put,post,delete,options'.split(',').map(method => {
http.axios[method] = function (url, data) {
return http('options', url, data)
}
})
run(http, 'client-')
function http(method, url, data) {
return new Promise((resolve, reject) => {
var request = new XMLHttpRequest();
request.open(method, url);
request.send(data);
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status === 200) {
var data = request.responseText
var contentType = request.getResponseHeader('content-type') || ''
if (contentType.indexOf('/json') > -1) {
try {
data = JSON.parse(data)
data = data && data.data
} catch (e) {
}
}
resolve({
status: request.status,
data,
headers: toHeaderObj(request.getAllResponseHeaders())
})
} else {
/*eslint-disable-next-line*/
reject({ status: request.status });
}
}
}
request.onerror = reject
})
}
function toHeaderObj(str) {
var r = {}
str.split(/\r\n/g).map(item => {
var ns = item.split(/\:\s*/g)
r[ns[0].toLowerCase()] = ns[1]
})
return r
}