-
Notifications
You must be signed in to change notification settings - Fork 5
/
index.test.js
114 lines (90 loc) · 2.61 KB
/
index.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
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
var assert = require('chai').assert;
var TestServer = require('.');
// very simple http handler
var app = (req, res) => {
var headers = {};
if (req.headers.ping) {
headers.pong = req.headers.ping;
}
res.writeHead(200, headers);
res.end(`${req.method} ${req.url} works!`);
};
describe('TestServer', () => {
var server;
beforeEach(() => {
server = new TestServer(app);
});
afterEach(() => {
return server.listener ? server.close() : null;
});
it('creates an http server', () => {
assert.typeOf(server.server, 'object');
});
it('supports calling constructor', () => {
server = TestServer(app);
assert.typeOf(server.server, 'object');
});
it('listens on a random port', () => {
assert.isNull(server.server.address());
return server.listen().then(() => {
var address = server.server.address();
assert.isAbove(address.port, 10000);
});
});
it('can\'t close connection if not listening', () => {
return server.close()
.then(assert.fail)
.catch((err) => {
assert.strictEqual(err.message, 'Not running');
});
});
it('closes the server connection', () => {
return server.listen().then(() => {
assert.typeOf(server.server.address(), 'object');
return server.close();
}).then(() => {
assert.isNull(server.server.address());
});
});
it('returns server address', () => {
return server.listen().then(() => {
assert.match(server.address, /http:\/\/localhost:[0-9]{5}/);
});
});
it('listens on fetch', () => {
return server.fetch('/foo').then(() => {
assert.typeOf(server.server.address(), 'object');
});
});
it('fetches from server', () => {
return server.fetch('/foo').then((res) => {
assert.strictEqual(res.status, 200);
return res.text();
}).then((body) => {
assert.strictEqual(body, 'GET /foo works!');
});
});
it('supports fetch options', () => {
var opts = {
headers: { ping: 'foo' }
};
return server.fetch('/bar', opts).then((res) => {
assert.strictEqual(res.headers.get('pong'), 'foo');
});
});
it('supports helper methods', () => {
var opts = {
headers: { ping: 'foo' }
};
['delete', 'get', 'head', 'options', 'patch', 'post', 'put'].forEach((method) => {
assert.typeOf(server[method], 'function');
});
return server.post('/mail', opts).then((res) => {
assert.strictEqual(res.status, 200);
assert.strictEqual(res.headers.get('pong'), 'foo');
return res.text();
}).then((body) => {
assert.strictEqual(body, 'POST /mail works!');
});
});
});