UNPKG

1.48 kBtext/coffeescriptView Raw
1###
2Tests that the @before builder function inserts new middleware into the correct
3position in the internal middleware stack
4###
5
6client = require('./client')
7server = require('connect').createServer()
8assert = require 'assert'
9
10describe "An app with @before middleware", ->
11 stack = ['findResource', 'coerceParams', 'dispatchHandler', 'renderResponse']
12 server = require('../lib/lazorse') ->
13 @port = 0
14
15 response_data = word: 'up'
16
17 # Assert various attributes of the req/res state before each middleware
18 extraAsserts =
19 findResource: (req, res) -> assert.ok not req.resource
20 coerceParams: (req, res) -> assert.ok req.resource; assert.deepEqual req.vars, {}
21 renderResponse: (req, res) -> assert.equal res.data, response_data
22
23 for mw, i in stack then do (i, mw) =>
24 @before @[mw], (req, res, next) ->
25 if i > 0
26 assert.equal stack[i-1], req.lastLayer
27 extraAsserts[mw]?(req, res)
28 res.allLayers ?= []
29 res.allLayers.push mw
30 req.lastLayer = mw
31 next()
32
33 @before @renderResponse, (req, res, next) ->
34 res.setHeader 'cool', res.allLayers.join ','
35 next()
36
37 @resource '/ok': GET: -> @ok response_data
38 before -> client.usePort server.address().port
39 after -> server.close()
40
41 it 'calls extra middleware at the right times', (done) ->
42 client.GET "/ok", (res) ->
43 assert.ok res.headers.cool
44 assert.deepEqual res.headers.cool.split(','), stack
45 done()