Skip to content
This repository was archived by the owner on Dec 1, 2023. It is now read-only.

Commit 66db41c

Browse files
committed
add jasmine test
1 parent 5598f43 commit 66db41c

20 files changed

+149
-112
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/node_modules
2+
/test/specs.js
23
.DS_Store

bower.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"ignore": [
99
".*",
1010
"build",
11-
"*.json",
12-
"*.md"
11+
"package.json"
1312
]
1413
}

package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"description": "A web request service for Vue.js",
55
"main": "src/index.js",
66
"scripts": {
7-
"build": "webpack --config build/webpack.build.config.js"
7+
"build": "webpack --config build/webpack.build.config.js",
8+
"test": "webpack --config test/webpack.config.js",
9+
"install": "npm run build && npm run test"
810
},
911
"repository": {
1012
"type": "git",
@@ -22,6 +24,7 @@
2224
},
2325
"homepage": "https://github.com/vuejs/vue-resource#readme",
2426
"devDependencies": {
27+
"jasmine-core": "^2.3.4",
2528
"webpack": "^1.11.0"
2629
}
2730
}

src/client/xhr.js

-65
This file was deleted.

src/http.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
*/
44

55
var Promise = require('./lib/promise');
6+
var jsonType = {'Content-Type': 'application/json;charset=utf-8'};
67

78
module.exports = function (_) {
89

9-
var jsonType = {'Content-Type': 'application/json;charset=utf-8'};
10-
var factory = require('./interceptor/factory')(_);
10+
var interceptor = require('./interceptor/factory')(_);
1111

1212
function Http(url, options) {
1313

@@ -23,9 +23,9 @@ module.exports = function (_) {
2323
Http.options, this.options, request
2424
);
2525

26-
request.client = require('./client/xhr')(_);
26+
request.client = require('./lib/xhr')(_);
2727

28-
var promise = factory(Http.interceptors).run(request);
28+
var promise = interceptor(Http.interceptors).run(request);
2929

3030
promise = extendPromise(promise.then(function (response) {
3131

src/interceptor/beforeSend.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ module.exports = function (_) {
1313
}
1414

1515
return request;
16-
1716
}
1817

1918
};
2019

21-
};
20+
};

src/interceptor/cors.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ module.exports = function (_) {
1515
}
1616

1717
return request;
18-
1918
}
2019

2120
};
@@ -25,7 +24,6 @@ module.exports = function (_) {
2524
var requestUrl = _.url.parse(url);
2625

2726
return (requestUrl.protocol !== originUrl.protocol || requestUrl.host !== originUrl.host);
28-
2927
}
3028

31-
};
29+
};

src/interceptor/factory.js

+2-6
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,13 @@ module.exports = function (_) {
1717
run: function (request, vm) {
1818

1919
var chain = [].concat(this.request, [function (request) {
20-
2120
return request.client.send(request);
22-
2321
}], this.response);
2422

2523
return chain.reduce(function (sequence, segment) {
26-
2724
return sequence.then(function (carry) {
2825
return segment.call(vm, carry);
2926
});
30-
3127
}, Promise.resolve(request));
3228

3329
}
@@ -51,6 +47,6 @@ module.exports = function (_) {
5147
});
5248

5349
return stack;
54-
5550
};
56-
};
51+
52+
};

src/interceptor/header.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ module.exports = function (_) {
2121
}
2222

2323
return request;
24-
2524
}
2625

2726
};
2827

29-
};
28+
};

src/interceptor/jsonp.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ module.exports = function (_) {
99
request: function (request) {
1010

1111
if (request.method == 'JSONP') {
12-
request.client = require('../client/jsonp')(_);
12+
request.client = require('../lib/jsonp')(_);
1313
}
1414

1515
return request;
16-
1716
}
1817

1918
};
2019

21-
};
20+
};

src/interceptor/mime.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ module.exports = function (_) {
2727
}
2828

2929
return request;
30-
3130
},
3231

3332
response: function (response) {
@@ -39,9 +38,8 @@ module.exports = function (_) {
3938
}
4039

4140
return response;
42-
4341
}
4442

4543
};
4644

47-
};
45+
};

src/interceptor/timeout.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,20 @@ module.exports = function (_) {
1212

1313
if (request.timeout) {
1414
timeout = setTimeout(function () {
15-
1615
request.client.cancel();
17-
1816
}, request.timeout);
1917
}
2018

2119
return request;
22-
2320
},
2421

2522
response: function (response) {
2623

2724
clearTimeout(timeout);
2825

2926
return response;
30-
3127
}
3228

3329
};
3430

35-
};
31+
};

src/client/jsonp.js src/lib/jsonp.js

+8-16
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
* JSONP request.
33
*/
44

5-
var Promise = require('../lib/promise');
5+
var Promise = require('./promise');
6+
var Response = require('./response');
67

78
module.exports = function (_) {
89

@@ -12,7 +13,7 @@ module.exports = function (_) {
1213

1314
send: function (request) {
1415

15-
var callback = '_jsonp' + Math.random().toString(36).substr(2), response = {}, script, body;
16+
var callback = '_jsonp' + Math.random().toString(36).substr(2), script, status, body;
1617

1718
request.params[request.jsonp] = callback;
1819

@@ -40,23 +41,16 @@ module.exports = function (_) {
4041

4142
switch (event.type) {
4243
case 'load':
43-
response.status = 200;
44+
status = 200;
4445
break;
4546
case 'error':
46-
response.status = 404;
47+
status = 404;
4748
break;
4849
default:
49-
response.status = 0;
50+
status = 0;
5051
}
5152

52-
response.ok = event.type === 'load';
53-
response.reject = !response.ok;
54-
response.responseText = body ? body : '';
55-
response.header = function () {
56-
return null
57-
};
58-
59-
resolve(response);
53+
resolve(Response(body, status));
6054
};
6155

6256
script.onload = handler;
@@ -68,10 +62,8 @@ module.exports = function (_) {
6862
},
6963

7064
cancel: function () {
71-
7265
handler({type: 'cancel'});
73-
7466
}
7567

7668
};
77-
};
69+
};

src/lib/response.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* Response object.
3+
*/
4+
5+
module.exports = function (body, status) {
6+
7+
return {
8+
ok: status >= 200 && status < 300,
9+
status: status || 0,
10+
responseText: body || ''
11+
};
12+
13+
};

src/lib/xhr.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* XMLHttp request.
3+
*/
4+
5+
var Promise = require('./promise');
6+
var Response = require('./response');
7+
8+
module.exports = function (_) {
9+
10+
var xhr, handler;
11+
12+
return {
13+
14+
send: function (request) {
15+
16+
xhr = new XMLHttpRequest();
17+
18+
if (request.crossOrigin && !('withCredentials' in xhr)) {
19+
xhr = new XDomainRequest();
20+
request.headers = {};
21+
}
22+
23+
if (_.isPlainObject(request.xhr)) {
24+
_.extend(xhr, request.xhr);
25+
}
26+
27+
return new Promise(function (resolve) {
28+
29+
xhr.open(request.method, _.url(request), true);
30+
31+
_.each(request.headers, function (value, header) {
32+
xhr.setRequestHeader(header, value);
33+
});
34+
35+
handler = function (event) {
36+
resolve(Response(xhr.responseText, xhr.status));
37+
};
38+
39+
xhr.onload = handler;
40+
xhr.onabort = handler;
41+
xhr.onerror = handler;
42+
43+
xhr.send(request.data);
44+
});
45+
46+
},
47+
48+
cancel: function () {
49+
xhr.abort();
50+
}
51+
52+
};
53+
};

test/data/test.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"foo": "bar"}

0 commit comments

Comments
 (0)