144 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| var after = require('after')
 | |
| var express = require('../')
 | |
|   , request = require('supertest');
 | |
| 
 | |
| describe('app', function(){
 | |
|   describe('.response', function(){
 | |
|     it('should extend the response prototype', function(done){
 | |
|       var app = express();
 | |
| 
 | |
|       app.response.shout = function(str){
 | |
|         this.send(str.toUpperCase());
 | |
|       };
 | |
| 
 | |
|       app.use(function(req, res){
 | |
|         res.shout('hey');
 | |
|       });
 | |
| 
 | |
|       request(app)
 | |
|       .get('/')
 | |
|       .expect('HEY', done);
 | |
|     })
 | |
| 
 | |
|     it('should only extend for the referenced app', function (done) {
 | |
|       var app1 = express()
 | |
|       var app2 = express()
 | |
|       var cb = after(2, done)
 | |
| 
 | |
|       app1.response.shout = function (str) {
 | |
|         this.send(str.toUpperCase())
 | |
|       }
 | |
| 
 | |
|       app1.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       app2.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/')
 | |
|         .expect(200, 'FOO', cb)
 | |
| 
 | |
|       request(app2)
 | |
|         .get('/')
 | |
|         .expect(500, /(?:not a function|has no method)/, cb)
 | |
|     })
 | |
| 
 | |
|     it('should inherit to sub apps', function (done) {
 | |
|       var app1 = express()
 | |
|       var app2 = express()
 | |
|       var cb = after(2, done)
 | |
| 
 | |
|       app1.response.shout = function (str) {
 | |
|         this.send(str.toUpperCase())
 | |
|       }
 | |
| 
 | |
|       app1.use('/sub', app2)
 | |
| 
 | |
|       app1.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       app2.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/')
 | |
|         .expect(200, 'FOO', cb)
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/sub')
 | |
|         .expect(200, 'FOO', cb)
 | |
|     })
 | |
| 
 | |
|     it('should allow sub app to override', function (done) {
 | |
|       var app1 = express()
 | |
|       var app2 = express()
 | |
|       var cb = after(2, done)
 | |
| 
 | |
|       app1.response.shout = function (str) {
 | |
|         this.send(str.toUpperCase())
 | |
|       }
 | |
| 
 | |
|       app2.response.shout = function (str) {
 | |
|         this.send(str + '!')
 | |
|       }
 | |
| 
 | |
|       app1.use('/sub', app2)
 | |
| 
 | |
|       app1.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       app2.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/')
 | |
|         .expect(200, 'FOO', cb)
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/sub')
 | |
|         .expect(200, 'foo!', cb)
 | |
|     })
 | |
| 
 | |
|     it('should not pollute parent app', function (done) {
 | |
|       var app1 = express()
 | |
|       var app2 = express()
 | |
|       var cb = after(2, done)
 | |
| 
 | |
|       app1.response.shout = function (str) {
 | |
|         this.send(str.toUpperCase())
 | |
|       }
 | |
| 
 | |
|       app2.response.shout = function (str) {
 | |
|         this.send(str + '!')
 | |
|       }
 | |
| 
 | |
|       app1.use('/sub', app2)
 | |
| 
 | |
|       app1.get('/sub/foo', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       app2.get('/', function (req, res) {
 | |
|         res.shout('foo')
 | |
|       })
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/sub')
 | |
|         .expect(200, 'foo!', cb)
 | |
| 
 | |
|       request(app1)
 | |
|         .get('/sub/foo')
 | |
|         .expect(200, 'FOO', cb)
 | |
|     })
 | |
|   })
 | |
| })
 |