Skip to content

Commit 00ad5be

Browse files
committed
tests: add more tests for app.request & app.response
1 parent 141914e commit 00ad5be

File tree

2 files changed

+232
-15
lines changed

2 files changed

+232
-15
lines changed

test/app.request.js

+119
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
var after = require('after')
23
var express = require('../')
34
, request = require('supertest');
45

@@ -19,5 +20,123 @@ describe('app', function(){
1920
.get('/foo?name=tobi')
2021
.expect('name=tobi', done);
2122
})
23+
24+
it('should only extend for the referenced app', function (done) {
25+
var app1 = express()
26+
var app2 = express()
27+
var cb = after(2, done)
28+
29+
app1.request.foobar = function () {
30+
return 'tobi'
31+
}
32+
33+
app1.get('/', function (req, res) {
34+
res.send(req.foobar())
35+
})
36+
37+
app2.get('/', function (req, res) {
38+
res.send(req.foobar())
39+
})
40+
41+
request(app1)
42+
.get('/')
43+
.expect(200, 'tobi', cb)
44+
45+
request(app2)
46+
.get('/')
47+
.expect(500, /(?:not a function|has no method)/, cb)
48+
})
49+
50+
it('should inherit to sub apps', function (done) {
51+
var app1 = express()
52+
var app2 = express()
53+
var cb = after(2, done)
54+
55+
app1.request.foobar = function () {
56+
return 'tobi'
57+
}
58+
59+
app1.use('/sub', app2)
60+
61+
app1.get('/', function (req, res) {
62+
res.send(req.foobar())
63+
})
64+
65+
app2.get('/', function (req, res) {
66+
res.send(req.foobar())
67+
})
68+
69+
request(app1)
70+
.get('/')
71+
.expect(200, 'tobi', cb)
72+
73+
request(app1)
74+
.get('/sub')
75+
.expect(200, 'tobi', cb)
76+
})
77+
78+
it('should allow sub app to override', function (done) {
79+
var app1 = express()
80+
var app2 = express()
81+
var cb = after(2, done)
82+
83+
app1.request.foobar = function () {
84+
return 'tobi'
85+
}
86+
87+
app2.request.foobar = function () {
88+
return 'loki'
89+
}
90+
91+
app1.use('/sub', app2)
92+
93+
app1.get('/', function (req, res) {
94+
res.send(req.foobar())
95+
})
96+
97+
app2.get('/', function (req, res) {
98+
res.send(req.foobar())
99+
})
100+
101+
request(app1)
102+
.get('/')
103+
.expect(200, 'tobi', cb)
104+
105+
request(app1)
106+
.get('/sub')
107+
.expect(200, 'loki', cb)
108+
})
109+
110+
it('should not pollute parent app', function (done) {
111+
var app1 = express()
112+
var app2 = express()
113+
var cb = after(2, done)
114+
115+
app1.request.foobar = function () {
116+
return 'tobi'
117+
}
118+
119+
app2.request.foobar = function () {
120+
return 'loki'
121+
}
122+
123+
app1.use('/sub', app2)
124+
125+
app1.get('/sub/foo', function (req, res) {
126+
res.send(req.foobar())
127+
})
128+
129+
app2.get('/', function (req, res) {
130+
res.send(req.foobar())
131+
})
132+
133+
request(app1)
134+
.get('/sub')
135+
.expect(200, 'loki', cb)
136+
137+
request(app1)
138+
.get('/sub/foo')
139+
.expect(200, 'tobi', cb)
140+
})
22141
})
23142
})

test/app.response.js

+113-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
var after = require('after')
23
var express = require('../')
34
, request = require('supertest');
45

@@ -20,25 +21,122 @@ describe('app', function(){
2021
.expect('HEY', done);
2122
})
2223

23-
it('should not be influenced by other app protos', function(done){
24-
var app = express()
25-
, app2 = express();
24+
it('should only extend for the referenced app', function (done) {
25+
var app1 = express()
26+
var app2 = express()
27+
var cb = after(2, done)
2628

27-
app.response.shout = function(str){
28-
this.send(str.toUpperCase());
29-
};
29+
app1.response.shout = function (str) {
30+
this.send(str.toUpperCase())
31+
}
3032

31-
app2.response.shout = function(str){
32-
this.send(str);
33-
};
33+
app1.get('/', function (req, res) {
34+
res.shout('foo')
35+
})
3436

35-
app.use(function(req, res){
36-
res.shout('hey');
37-
});
37+
app2.get('/', function (req, res) {
38+
res.shout('foo')
39+
})
3840

39-
request(app)
40-
.get('/')
41-
.expect('HEY', done);
41+
request(app1)
42+
.get('/')
43+
.expect(200, 'FOO', cb)
44+
45+
request(app2)
46+
.get('/')
47+
.expect(500, /(?:not a function|has no method)/, cb)
48+
})
49+
50+
it('should inherit to sub apps', function (done) {
51+
var app1 = express()
52+
var app2 = express()
53+
var cb = after(2, done)
54+
55+
app1.response.shout = function (str) {
56+
this.send(str.toUpperCase())
57+
}
58+
59+
app1.use('/sub', app2)
60+
61+
app1.get('/', function (req, res) {
62+
res.shout('foo')
63+
})
64+
65+
app2.get('/', function (req, res) {
66+
res.shout('foo')
67+
})
68+
69+
request(app1)
70+
.get('/')
71+
.expect(200, 'FOO', cb)
72+
73+
request(app1)
74+
.get('/sub')
75+
.expect(200, 'FOO', cb)
76+
})
77+
78+
it('should allow sub app to override', function (done) {
79+
var app1 = express()
80+
var app2 = express()
81+
var cb = after(2, done)
82+
83+
app1.response.shout = function (str) {
84+
this.send(str.toUpperCase())
85+
}
86+
87+
app2.response.shout = function (str) {
88+
this.send(str + '!')
89+
}
90+
91+
app1.use('/sub', app2)
92+
93+
app1.get('/', function (req, res) {
94+
res.shout('foo')
95+
})
96+
97+
app2.get('/', function (req, res) {
98+
res.shout('foo')
99+
})
100+
101+
request(app1)
102+
.get('/')
103+
.expect(200, 'FOO', cb)
104+
105+
request(app1)
106+
.get('/sub')
107+
.expect(200, 'foo!', cb)
108+
})
109+
110+
it('should not pollute parent app', function (done) {
111+
var app1 = express()
112+
var app2 = express()
113+
var cb = after(2, done)
114+
115+
app1.response.shout = function (str) {
116+
this.send(str.toUpperCase())
117+
}
118+
119+
app2.response.shout = function (str) {
120+
this.send(str + '!')
121+
}
122+
123+
app1.use('/sub', app2)
124+
125+
app1.get('/sub/foo', function (req, res) {
126+
res.shout('foo')
127+
})
128+
129+
app2.get('/', function (req, res) {
130+
res.shout('foo')
131+
})
132+
133+
request(app1)
134+
.get('/sub')
135+
.expect(200, 'foo!', cb)
136+
137+
request(app1)
138+
.get('/sub/foo')
139+
.expect(200, 'FOO', cb)
42140
})
43141
})
44142
})

0 commit comments

Comments
 (0)