tests: add more tests for app.request & app.response
[express.git] / test / app.response.js
blobea696b566f15841b7b21e22de597d63f6e6be92b
2 var after = require('after')
3 var express = require('../')
4   , request = require('supertest');
6 describe('app', function(){
7   describe('.response', function(){
8     it('should extend the response prototype', function(done){
9       var app = express();
11       app.response.shout = function(str){
12         this.send(str.toUpperCase());
13       };
15       app.use(function(req, res){
16         res.shout('hey');
17       });
19       request(app)
20       .get('/')
21       .expect('HEY', done);
22     })
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)
29       app1.response.shout = function (str) {
30         this.send(str.toUpperCase())
31       }
33       app1.get('/', function (req, res) {
34         res.shout('foo')
35       })
37       app2.get('/', function (req, res) {
38         res.shout('foo')
39       })
41       request(app1)
42         .get('/')
43         .expect(200, 'FOO', cb)
45       request(app2)
46         .get('/')
47         .expect(500, /(?:not a function|has no method)/, cb)
48     })
50     it('should inherit to sub apps', function (done) {
51       var app1 = express()
52       var app2 = express()
53       var cb = after(2, done)
55       app1.response.shout = function (str) {
56         this.send(str.toUpperCase())
57       }
59       app1.use('/sub', app2)
61       app1.get('/', function (req, res) {
62         res.shout('foo')
63       })
65       app2.get('/', function (req, res) {
66         res.shout('foo')
67       })
69       request(app1)
70         .get('/')
71         .expect(200, 'FOO', cb)
73       request(app1)
74         .get('/sub')
75         .expect(200, 'FOO', cb)
76     })
78     it('should allow sub app to override', function (done) {
79       var app1 = express()
80       var app2 = express()
81       var cb = after(2, done)
83       app1.response.shout = function (str) {
84         this.send(str.toUpperCase())
85       }
87       app2.response.shout = function (str) {
88         this.send(str + '!')
89       }
91       app1.use('/sub', app2)
93       app1.get('/', function (req, res) {
94         res.shout('foo')
95       })
97       app2.get('/', function (req, res) {
98         res.shout('foo')
99       })
101       request(app1)
102         .get('/')
103         .expect(200, 'FOO', cb)
105       request(app1)
106         .get('/sub')
107         .expect(200, 'foo!', cb)
108     })
110     it('should not pollute parent app', function (done) {
111       var app1 = express()
112       var app2 = express()
113       var cb = after(2, done)
115       app1.response.shout = function (str) {
116         this.send(str.toUpperCase())
117       }
119       app2.response.shout = function (str) {
120         this.send(str + '!')
121       }
123       app1.use('/sub', app2)
125       app1.get('/sub/foo', function (req, res) {
126         res.shout('foo')
127       })
129       app2.get('/', function (req, res) {
130         res.shout('foo')
131       })
133       request(app1)
134         .get('/sub')
135         .expect(200, 'foo!', cb)
137       request(app1)
138         .get('/sub/foo')
139         .expect(200, 'FOO', cb)
140     })
141   })