sails
Version:
API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)
198 lines (167 loc) • 4.98 kB
JavaScript
var _ = require('@sailshq/lodash');
var request = require('@sailshq/request');
var Sails = require('../../lib').Sails;
var assert = require('assert');
var fs = require('fs-extra');
var request = require('@sailshq/request');
var appHelper = require('./helpers/appHelper');
var path = require('path');
describe('middleware :: ', function() {
describe('500 :: ', function() {
var appName = 'testApp';
var sailsApp;
before(function(done) {
appHelper.build(function(err) {
if (err) {return done(err);}
fs.writeFileSync(path.resolve('..', appName, 'views', '500.ejs'), 'bogus err bruh!');
fs.writeFileSync(path.resolve('..', appName, 'config', 'routes.js'), 'module.exports.routes = { \'/err\': function (req, res) {throw new Error(\'errrr\');} };');
return done();
});
});
after(function() {
process.chdir('../');
appHelper.teardown();
});
describe('with no custom 500 handler installed', function() {
before(function(done) {
appHelper.lift({
hooks: {
pubsub: false
}
}, function(err, _sailsApp) {
if (err) { return done(err); }
sailsApp = _sailsApp;
return done();
});
});
it('the default 500 handler should respond to a request that causes an error', function(done) {
request(
{
method: 'GET',
uri: 'http://localhost:1342/err',
headers: {
'Accept': 'text/html'
}
},
function(err, response, body) {
if (err) { return done(err); }
assert.equal(response.statusCode, 500);
assert(body.match('<html>'));
assert(body.match('bogus err bruh!'));
return done();
}
);
});
after(function(done) {
sailsApp.lower(done);
});
});
describe('with a custom 500 handler installed', function() {
before(function(done) {
appHelper.lift({
hooks: {
pubsub: false
},
http: {
middleware: {
order: [
'startRequestTimer',
'cookieParser',
'session',
'bodyParser',
'handleBodyParserError',
'compress',
'methodOverride',
'poweredBy',
'$custom',
'router',
'www',
'favicon',
'err'
],
err: function (err, req, res, next) {
return res.send('custom err bro');
}
}
}
}, function(err, _sailsApp) {
if (err) { return done(err); }
sailsApp = _sailsApp;
return done();
});
});
it('the custom 500 handler should respond to a request that causes an error', function(done) {
request(
{
method: 'GET',
uri: 'http://localhost:1342/err',
headers: {
'Accept': 'text/html'
}
},
function(err, response, body) {
if (err) { return done(err); }
assert.equal(response.statusCode, 200);
assert.equal(body, 'custom err bro');
return done();
}
);
});
after(function(done) {
sailsApp.lower(done);
});
});
describe('with 500 left out of a custom middleware order', function() {
before(function(done) {
appHelper.lift({
hooks: {
pubsub: false
},
http: {
middleware: {
order: [
'startRequestTimer',
'cookieParser',
'session',
'bodyParser',
'handleBodyParserError',
'compress',
'methodOverride',
'poweredBy',
'$custom',
'router',
'www',
'favicon'
]
}
}
}, function(err, _sailsApp) {
if (err) { return done(err); }
sailsApp = _sailsApp;
return done();
});
});
it('the default 500 handler should respond to a request that causes an error', function(done) {
request(
{
method: 'GET',
uri: 'http://localhost:1342/err',
headers: {
'Accept': 'text/html'
}
},
function(err, response, body) {
if (err) { return done(err); }
assert.equal(response.statusCode, 500);
assert(body.match('<html>'));
assert(body.match('bogus err bruh!'));
return done();
}
);
});
after(function(done) {
sailsApp.lower(done);
});
});
});
});