-
Notifications
You must be signed in to change notification settings - Fork 2
/
http.js
75 lines (65 loc) · 1.66 KB
/
http.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var http = require('http')
module.exports.Request = Request
function Request (app) {
var self = this
this.data = []
this.header = {}
this.app = app
if (!this.server) {
this.server = http.Server(app)
this.server.listen(0, function(){
self.addr = self.server.address()
self.listening = true
})
}
}
Request.prototype.get = function (path) {
return this.request('GET', path)
}
Request.prototype.request = function (method, path) {
this.method = method
this.path = path
return this
}
Request.prototype.set = function(field, val){
this.header[field] = val
return this
}
Request.prototype.expect = function(contentType, body, fn){
this.end(function(res){
res.headers['content-type'].should.equal(contentType)
if (body instanceof RegExp) {
res.body.should.match(body)
} else {
res.body.should.equal(body)
}
fn()
})
}
Request.prototype.end = function(fn){
var self = this
if (this.listening) {
var req = http.request({
method: this.method,
port: this.addr.port,
host: this.addr.address,
path: this.path,
headers: this.header
})
req.on('response', function(res){
var buf = ''
res.setEncoding('utf8')
res.on('data', function(chunk){ buf += chunk })
res.on('end', function(){
res.body = buf
fn(res)
})
})
req.end()
} else {
this.server.on('listening', function(){
self.end(fn)
})
}
return this
}