loopback/test/middleware-phase.test.js

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)
};
}