66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
var extend = require('util')._extend;
|
|
var MiddlewarePhase = require('../lib/middleware-phase');
|
|
var expect = require('chai').expect;
|
|
|
|
describe('middleware-phase', function() {
|
|
it('executes middleware in the correct order', function(done) {
|
|
var phase = new MiddlewarePhase();
|
|
var steps = [];
|
|
var ctx = givenRouterContext();
|
|
|
|
var handlerFn = function(name) {
|
|
return function(req, res, next) {
|
|
expect(req, name + '.req').to.equal(ctx.req);
|
|
expect(res, name + '.res').to.equal(ctx.res);
|
|
steps.push(name);
|
|
next();
|
|
};
|
|
};
|
|
|
|
phase.use(handlerFn('use'));
|
|
phase.before(handlerFn('before'));
|
|
phase.after(handlerFn('after'));
|
|
|
|
phase.run(ctx, function verify(err) {
|
|
if (err) return done(err);
|
|
expect(steps).to.eql(['before', 'use', 'after']);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('passes errors to the next handler', function(done) {
|
|
var phase = new MiddlewarePhase();
|
|
var expectedError = new Error('expected error');
|
|
|
|
phase.before(function(req, res, next) {
|
|
next(expectedError);
|
|
});
|
|
|
|
phase.after(function(err, req, res, next) {
|
|
expect(err).to.equal(expectedError);
|
|
done();
|
|
});
|
|
|
|
phase.run(givenRouterContext(), function(err) {
|
|
if (err && err !== expectedError) return done(err);
|
|
done(new Error(
|
|
'The handler chain should have been stopped by error handler'));
|
|
});
|
|
});
|
|
});
|
|
|
|
function givenRequest(props) {
|
|
return extend({ url: '/test/url', method: 'GET' }, props);
|
|
}
|
|
|
|
function givenResponse(props) {
|
|
return extend({}, props);
|
|
}
|
|
|
|
function givenRouterContext(req, res) {
|
|
return {
|
|
req: givenRequest(req),
|
|
res: givenResponse(res)
|
|
};
|
|
}
|