Skip to content

Commit d0b6b3d

Browse files
committed
tests: change Route tests to use callback
1 parent f34944c commit d0b6b3d

File tree

1 file changed

+77
-55
lines changed

1 file changed

+77
-55
lines changed

test/Route.js

Lines changed: 77 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
var after = require('after');
23
var should = require('should');
34
var express = require('../')
45
, Route = express.Route
@@ -9,167 +10,182 @@ describe('Route', function(){
910

1011
describe('.all', function(){
1112
it('should add handler', function(done){
13+
var req = { method: 'GET', url: '/' };
1214
var route = new Route('/foo');
1315

1416
route.all(function(req, res, next) {
15-
assert.equal(req.a, 1);
16-
assert.equal(res.b, 2);
17+
req.called = true;
1718
next();
1819
});
1920

20-
route.dispatch({ a:1, method: 'GET' }, { b:2 }, done);
21+
route.dispatch(req, {}, function (err) {
22+
if (err) return done(err);
23+
should(req.called).be.ok;
24+
done();
25+
});
2126
})
2227

2328
it('should handle VERBS', function(done) {
29+
var count = 0;
2430
var route = new Route('/foo');
31+
var cb = after(methods.length, function (err) {
32+
if (err) return done(err);
33+
count.should.equal(methods.length);
34+
done();
35+
});
2536

26-
var count = 0;
2737
route.all(function(req, res, next) {
2838
count++;
39+
next();
2940
});
3041

3142
methods.forEach(function testMethod(method) {
32-
route.dispatch({ method: method }, {});
43+
var req = { method: method, url: '/' };
44+
route.dispatch(req, {}, cb);
3345
});
34-
35-
assert.equal(count, methods.length);
36-
done();
3746
})
3847

3948
it('should stack', function(done) {
49+
var req = { count: 0, method: 'GET', url: '/' };
4050
var route = new Route('/foo');
4151

42-
var count = 0;
4352
route.all(function(req, res, next) {
44-
count++;
53+
req.count++;
4554
next();
4655
});
4756

4857
route.all(function(req, res, next) {
49-
count++;
58+
req.count++;
5059
next();
5160
});
5261

53-
route.dispatch({ method: 'GET' }, {}, function(err) {
54-
assert.ifError(err);
55-
count++;
62+
route.dispatch(req, {}, function (err) {
63+
if (err) return done(err);
64+
req.count.should.equal(2);
65+
done();
5666
});
57-
58-
assert.equal(count, 3);
59-
done();
6067
})
6168
})
6269

6370
describe('.VERB', function(){
6471
it('should support .get', function(done){
72+
var req = { method: 'GET', url: '/' };
6573
var route = new Route('');
6674

67-
var count = 0;
6875
route.get(function(req, res, next) {
69-
count++;
76+
req.called = true;
77+
next();
7078
})
7179

72-
route.dispatch({ method: 'GET' }, {});
73-
assert(count);
74-
done();
80+
route.dispatch(req, {}, function (err) {
81+
if (err) return done(err);
82+
should(req.called).be.ok;
83+
done();
84+
});
7585
})
7686

7787
it('should limit to just .VERB', function(done){
88+
var req = { method: 'POST', url: '/' };
7889
var route = new Route('');
7990

8091
route.get(function(req, res, next) {
81-
assert(false);
82-
done();
92+
throw new Error('not me!');
8393
})
8494

8595
route.post(function(req, res, next) {
86-
assert(true);
96+
req.called = true;
97+
next();
8798
})
8899

89-
route.dispatch({ method: 'post' }, {});
90-
done();
100+
route.dispatch(req, {}, function (err) {
101+
if (err) return done(err);
102+
should(req.called).be.true;
103+
done();
104+
});
91105
})
92106

93107
it('should allow fallthrough', function(done){
108+
var req = { order: '', method: 'GET', url: '/' };
94109
var route = new Route('');
95110

96-
var order = '';
97111
route.get(function(req, res, next) {
98-
order += 'a';
112+
req.order += 'a';
99113
next();
100114
})
101115

102116
route.all(function(req, res, next) {
103-
order += 'b';
117+
req.order += 'b';
104118
next();
105119
});
106120

107121
route.get(function(req, res, next) {
108-
order += 'c';
122+
req.order += 'c';
123+
next();
109124
})
110125

111-
route.dispatch({ method: 'get' }, {});
112-
assert.equal(order, 'abc');
113-
done();
126+
route.dispatch(req, {}, function (err) {
127+
if (err) return done(err);
128+
req.order.should.equal('abc');
129+
done();
130+
});
114131
})
115132
})
116133

117134
describe('errors', function(){
118135
it('should handle errors via arity 4 functions', function(done){
136+
var req = { order: '', method: 'GET', url: '/' };
119137
var route = new Route('');
120138

121-
var order = '';
122139
route.all(function(req, res, next){
123140
next(new Error('foobar'));
124141
});
125142

126143
route.all(function(req, res, next){
127-
order += '0';
144+
req.order += '0';
128145
next();
129146
});
130147

131148
route.all(function(err, req, res, next){
132-
order += 'a';
149+
req.order += 'a';
133150
next(err);
134151
});
135152

136-
route.all(function(err, req, res, next){
137-
assert.equal(err.message, 'foobar');
138-
assert.equal(order, 'a');
153+
route.dispatch(req, {}, function (err) {
154+
should(err).be.ok;
155+
should(err.message).equal('foobar');
156+
req.order.should.equal('a');
139157
done();
140158
});
141-
142-
route.dispatch({ method: 'get' }, {});
143159
})
144160

145161
it('should handle throw', function(done) {
162+
var req = { order: '', method: 'GET', url: '/' };
146163
var route = new Route('');
147164

148-
var order = '';
149165
route.all(function(req, res, next){
150166
throw new Error('foobar');
151167
});
152168

153169
route.all(function(req, res, next){
154-
order += '0';
170+
req.order += '0';
155171
next();
156172
});
157173

158174
route.all(function(err, req, res, next){
159-
order += 'a';
175+
req.order += 'a';
160176
next(err);
161177
});
162178

163-
route.all(function(err, req, res, next){
164-
assert.equal(err.message, 'foobar');
165-
assert.equal(order, 'a');
179+
route.dispatch(req, {}, function (err) {
180+
should(err).be.ok;
181+
should(err.message).equal('foobar');
182+
req.order.should.equal('a');
166183
done();
167184
});
168-
169-
route.dispatch({ method: 'get' }, {});
170185
});
171186

172187
it('should handle throwing inside error handlers', function(done) {
188+
var req = { method: 'GET', url: '/' };
173189
var route = new Route('');
174190

175191
route.get(function(req, res, next){
@@ -181,36 +197,42 @@ describe('Route', function(){
181197
});
182198

183199
route.get(function(err, req, res, next){
184-
assert.equal(err.message, 'oops');
185-
done();
200+
req.message = err.message;
201+
next();
186202
});
187203

188-
route.dispatch({ url: '/', method: 'GET' }, {});
204+
route.dispatch(req, {}, function (err) {
205+
if (err) return done(err);
206+
should(req.message).equal('oops');
207+
done();
208+
});
189209
});
190210

191211
it('should handle throw in .all', function(done) {
212+
var req = { method: 'GET', url: '/' };
192213
var route = new Route('');
193214

194215
route.all(function(req, res, next){
195216
throw new Error('boom!');
196217
});
197218

198-
route.dispatch({ url: '/', method: 'GET' }, {}, function(err){
219+
route.dispatch(req, {}, function(err){
199220
should(err).be.ok;
200221
err.message.should.equal('boom!');
201222
done();
202223
});
203224
});
204225

205226
it('should handle single error handler', function(done) {
227+
var req = { method: 'GET', url: '/' };
206228
var route = new Route('');
207229

208230
route.all(function(err, req, res, next){
209231
// this should not execute
210232
true.should.be.false;
211233
});
212234

213-
route.dispatch({ url: '/', method: 'GET' }, {}, done);
235+
route.dispatch(req, {}, done);
214236
});
215237
})
216238
})

0 commit comments

Comments
 (0)