353 lines
8.5 KiB
JavaScript
353 lines
8.5 KiB
JavaScript
|
|
var express = require('..');
|
|
var path = require('path')
|
|
var request = require('supertest');
|
|
var tmpl = require('./support/tmpl');
|
|
|
|
describe('res', function(){
|
|
describe('.render(name)', function(){
|
|
it('should support absolute paths', function(done){
|
|
var app = createApp();
|
|
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render(path.join(__dirname, 'fixtures', 'user.tmpl'))
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should support absolute paths with "view engine"', function(done){
|
|
var app = createApp();
|
|
|
|
app.locals.user = { name: 'tobi' };
|
|
app.set('view engine', 'tmpl');
|
|
|
|
app.use(function(req, res){
|
|
res.render(path.join(__dirname, 'fixtures', 'user'))
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should error without "view engine" set and no file extension', function (done) {
|
|
var app = createApp();
|
|
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render(path.join(__dirname, 'fixtures', 'user'))
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect(500, /No default engine was specified/, done);
|
|
})
|
|
|
|
it('should expose app.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should expose app.locals with `name` property', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.locals.name = 'tobi';
|
|
|
|
app.use(function(req, res){
|
|
res.render('name.tmpl');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should support index.<engine>', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.set('view engine', 'tmpl');
|
|
|
|
app.use(function(req, res){
|
|
res.render('blog/post');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<h1>blog post</h1>', done);
|
|
})
|
|
|
|
describe('when an error occurs', function(){
|
|
it('should next(err)', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl');
|
|
});
|
|
|
|
app.use(function(err, req, res, next){
|
|
res.status(500).send('got error: ' + err.name)
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect(500, 'got error: RenderError', done)
|
|
})
|
|
})
|
|
|
|
describe('when "view engine" is given', function(){
|
|
it('should render the template', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('view engine', 'tmpl');
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
res.render('email');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>This is an email</p>', done);
|
|
})
|
|
})
|
|
|
|
describe('when "views" is given', function(){
|
|
it('should lookup the file in the path', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures', 'default_layout'))
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl', { user: { name: 'tobi' } });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
describe('when array of paths', function(){
|
|
it('should lookup the file in the path', function(done){
|
|
var app = createApp();
|
|
var views = [
|
|
path.join(__dirname, 'fixtures', 'local_layout'),
|
|
path.join(__dirname, 'fixtures', 'default_layout')
|
|
]
|
|
|
|
app.set('views', views);
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl', { user: { name: 'tobi' } });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<span>tobi</span>', done);
|
|
})
|
|
|
|
it('should lookup in later paths until found', function(done){
|
|
var app = createApp();
|
|
var views = [
|
|
path.join(__dirname, 'fixtures', 'local_layout'),
|
|
path.join(__dirname, 'fixtures', 'default_layout')
|
|
]
|
|
|
|
app.set('views', views);
|
|
|
|
app.use(function(req, res){
|
|
res.render('name.tmpl', { name: 'tobi' });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('.render(name, option)', function(){
|
|
it('should render the template', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
var user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl', { user: user });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should expose app.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should expose res.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.tmpl');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>tobi</p>', done);
|
|
})
|
|
|
|
it('should give precedence to res.locals over app.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'jane' };
|
|
res.render('user.tmpl', {});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>jane</p>', done);
|
|
})
|
|
|
|
it('should give precedence to res.render() locals over res.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
var jane = { name: 'jane' };
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.tmpl', { user: jane });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>jane</p>', done);
|
|
})
|
|
|
|
it('should give precedence to res.render() locals over app.locals', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
app.locals.user = { name: 'tobi' };
|
|
var jane = { name: 'jane' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl', { user: jane });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>jane</p>', done);
|
|
})
|
|
})
|
|
|
|
describe('.render(name, options, fn)', function(){
|
|
it('should pass the resulting string', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
var tobi = { name: 'tobi' };
|
|
res.render('user.tmpl', { user: tobi }, function (err, html) {
|
|
html = html.replace('tobi', 'loki');
|
|
res.end(html);
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>loki</p>', done);
|
|
})
|
|
})
|
|
|
|
describe('.render(name, fn)', function(){
|
|
it('should pass the resulting string', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.tmpl', function (err, html) {
|
|
html = html.replace('tobi', 'loki');
|
|
res.end(html);
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect('<p>loki</p>', done);
|
|
})
|
|
|
|
describe('when an error occurs', function(){
|
|
it('should pass it to the callback', function(done){
|
|
var app = createApp();
|
|
|
|
app.set('views', path.join(__dirname, 'fixtures'))
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.tmpl', function (err) {
|
|
if (err) {
|
|
res.status(500).send('got error: ' + err.name)
|
|
}
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect(500, 'got error: RenderError', done)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
function createApp() {
|
|
var app = express();
|
|
|
|
app.engine('.tmpl', tmpl);
|
|
|
|
return app;
|
|
}
|