Skip to content

Commit c82fa19

Browse files
committed
tests: add router promise tests
1 parent fa22245 commit c82fa19

File tree

2 files changed

+269
-0
lines changed

2 files changed

+269
-0
lines changed

test/app.route.js

+135
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
var express = require('../');
22
var request = require('supertest');
33

4+
var describePromises = global.Promise ? describe : describe.skip
5+
46
describe('app.route', function(){
57
it('should return a new route', function(done){
68
var app = express();
@@ -59,4 +61,137 @@ describe('app.route', function(){
5961
.get('/test')
6062
.expect(404, done);
6163
});
64+
65+
describePromises('promise support', function () {
66+
it('should pass rejected promise value', function (done) {
67+
var app = express()
68+
var route = app.route('/foo')
69+
70+
route.all(function createError (req, res, next) {
71+
return Promise.reject(new Error('boom!'))
72+
})
73+
74+
route.all(function helloWorld (req, res) {
75+
res.send('hello, world!')
76+
})
77+
78+
route.all(function handleError (err, req, res, next) {
79+
res.status(500)
80+
res.send('caught: ' + err.message)
81+
})
82+
83+
request(app)
84+
.get('/foo')
85+
.expect(500, 'caught: boom!', done)
86+
})
87+
88+
it('should pass rejected promise without value', function (done) {
89+
var app = express()
90+
var route = app.route('/foo')
91+
92+
route.all(function createError (req, res, next) {
93+
return Promise.reject()
94+
})
95+
96+
route.all(function helloWorld (req, res) {
97+
res.send('hello, world!')
98+
})
99+
100+
route.all(function handleError (err, req, res, next) {
101+
res.status(500)
102+
res.send('caught: ' + err.message)
103+
})
104+
105+
request(app)
106+
.get('/foo')
107+
.expect(500, 'caught: Rejected promise', done)
108+
})
109+
110+
it('should ignore resolved promise', function (done) {
111+
var app = express()
112+
var route = app.route('/foo')
113+
114+
route.all(function createError (req, res, next) {
115+
res.send('saw GET /foo')
116+
return Promise.resolve('foo')
117+
})
118+
119+
route.all(function () {
120+
done(new Error('Unexpected route invoke'))
121+
})
122+
123+
request(app)
124+
.get('/foo')
125+
.expect(200, 'saw GET /foo', done)
126+
})
127+
128+
describe('error handling', function () {
129+
it('should pass rejected promise value', function (done) {
130+
var app = express()
131+
var route = app.route('/foo')
132+
133+
route.all(function createError (req, res, next) {
134+
return Promise.reject(new Error('boom!'))
135+
})
136+
137+
route.all(function handleError (err, req, res, next) {
138+
return Promise.reject(new Error('caught: ' + err.message))
139+
})
140+
141+
route.all(function handleError (err, req, res, next) {
142+
res.status(500)
143+
res.send('caught again: ' + err.message)
144+
})
145+
146+
request(app)
147+
.get('/foo')
148+
.expect(500, 'caught again: caught: boom!', done)
149+
})
150+
151+
it('should pass rejected promise without value', function (done) {
152+
var app = express()
153+
var route = app.route('/foo')
154+
155+
route.all(function createError (req, res, next) {
156+
return Promise.reject(new Error('boom!'))
157+
})
158+
159+
route.all(function handleError (err, req, res, next) {
160+
return Promise.reject()
161+
})
162+
163+
route.all(function handleError (err, req, res, next) {
164+
res.status(500)
165+
res.send('caught again: ' + err.message)
166+
})
167+
168+
request(app)
169+
.get('/foo')
170+
.expect(500, 'caught again: Rejected promise', done)
171+
})
172+
173+
it('should ignore resolved promise', function (done) {
174+
var app = express()
175+
var route = app.route('/foo')
176+
177+
route.all(function createError (req, res, next) {
178+
return Promise.reject(new Error('boom!'))
179+
})
180+
181+
route.all(function handleError (err, req, res, next) {
182+
res.status(500)
183+
res.send('caught: ' + err.message)
184+
return Promise.resolve('foo')
185+
})
186+
187+
route.all(function () {
188+
done(new Error('Unexpected route invoke'))
189+
})
190+
191+
request(app)
192+
.get('/foo')
193+
.expect(500, 'caught: boom!', done)
194+
})
195+
})
196+
})
62197
});

test/app.router.js

+134
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ var express = require('../')
55
, assert = require('assert')
66
, methods = require('methods');
77

8+
var describePromises = global.Promise ? describe : describe.skip
9+
810
describe('app.router', function(){
911
it('should restore req.params after leaving router', function(done){
1012
var app = express();
@@ -1020,6 +1022,138 @@ describe('app.router', function(){
10201022
})
10211023
})
10221024

1025+
describePromises('promise support', function () {
1026+
it('should pass rejected promise value', function (done) {
1027+
var app = express()
1028+
var router = new express.Router()
1029+
1030+
router.use(function createError (req, res, next) {
1031+
return Promise.reject(new Error('boom!'))
1032+
})
1033+
1034+
router.use(function sawError (err, req, res, next) {
1035+
res.send('saw ' + err.name + ': ' + err.message)
1036+
})
1037+
1038+
app.use(router)
1039+
1040+
request(app)
1041+
.get('/')
1042+
.expect(200, 'saw Error: boom!', done)
1043+
})
1044+
1045+
it('should pass rejected promise without value', function (done) {
1046+
var app = express()
1047+
var router = new express.Router()
1048+
1049+
router.use(function createError (req, res, next) {
1050+
return Promise.reject()
1051+
})
1052+
1053+
router.use(function sawError (err, req, res, next) {
1054+
res.send('saw ' + err.name + ': ' + err.message)
1055+
})
1056+
1057+
app.use(router)
1058+
1059+
request(app)
1060+
.get('/')
1061+
.expect(200, 'saw Error: Rejected promise', done)
1062+
})
1063+
1064+
it('should ignore resolved promise', function (done) {
1065+
var app = express()
1066+
var router = new express.Router()
1067+
1068+
router.use(function createError (req, res, next) {
1069+
res.send('saw GET /foo')
1070+
return Promise.resolve('foo')
1071+
})
1072+
1073+
router.use(function () {
1074+
done(new Error('Unexpected middleware invoke'))
1075+
})
1076+
1077+
app.use(router)
1078+
1079+
request(app)
1080+
.get('/foo')
1081+
.expect(200, 'saw GET /foo', done)
1082+
})
1083+
1084+
describe('error handling', function () {
1085+
it('should pass rejected promise value', function (done) {
1086+
var app = express()
1087+
var router = new express.Router()
1088+
1089+
router.use(function createError (req, res, next) {
1090+
return Promise.reject(new Error('boom!'))
1091+
})
1092+
1093+
router.use(function handleError (err, req, res, next) {
1094+
return Promise.reject(new Error('caught: ' + err.message))
1095+
})
1096+
1097+
router.use(function sawError (err, req, res, next) {
1098+
res.send('saw ' + err.name + ': ' + err.message)
1099+
})
1100+
1101+
app.use(router)
1102+
1103+
request(app)
1104+
.get('/')
1105+
.expect(200, 'saw Error: caught: boom!', done)
1106+
})
1107+
1108+
it('should pass rejected promise without value', function (done) {
1109+
var app = express()
1110+
var router = new express.Router()
1111+
1112+
router.use(function createError (req, res, next) {
1113+
return Promise.reject()
1114+
})
1115+
1116+
router.use(function handleError (err, req, res, next) {
1117+
return Promise.reject(new Error('caught: ' + err.message))
1118+
})
1119+
1120+
router.use(function sawError (err, req, res, next) {
1121+
res.send('saw ' + err.name + ': ' + err.message)
1122+
})
1123+
1124+
app.use(router)
1125+
1126+
request(app)
1127+
.get('/')
1128+
.expect(200, 'saw Error: caught: Rejected promise', done)
1129+
})
1130+
1131+
it('should ignore resolved promise', function (done) {
1132+
var app = express()
1133+
var router = new express.Router()
1134+
1135+
router.use(function createError (req, res, next) {
1136+
return Promise.reject(new Error('boom!'))
1137+
})
1138+
1139+
router.use(function handleError (err, req, res, next) {
1140+
res.send('saw ' + err.name + ': ' + err.message)
1141+
return Promise.resolve('foo')
1142+
})
1143+
1144+
router.use(function () {
1145+
done(new Error('Unexpected middleware invoke'))
1146+
})
1147+
1148+
app.use(router)
1149+
1150+
request(app)
1151+
.get('/foo')
1152+
.expect(200, 'saw Error: boom!', done)
1153+
})
1154+
})
1155+
})
1156+
10231157
it('should allow rewriting of the url', function(done){
10241158
var app = express();
10251159

0 commit comments

Comments
 (0)