mirror of
https://github.com/zebrajr/express.git
synced 2025-12-06 12:19:51 +01:00
328 lines
7.5 KiB
JavaScript
328 lines
7.5 KiB
JavaScript
|
|
var express = require('../')
|
|
, request = require('./support/http');
|
|
|
|
describe('res', function(){
|
|
describe('.render(name)', function(){
|
|
it('should support absolute paths', function(done){
|
|
var app = express();
|
|
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render(__dirname + '/fixtures/user.jade');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should support absolute paths with "view engine"', function(done){
|
|
var app = express();
|
|
|
|
app.locals.user = { name: 'tobi' };
|
|
app.set('view engine', 'jade');
|
|
|
|
app.use(function(req, res){
|
|
res.render(__dirname + '/fixtures/user');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should expose app.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should support index.<engine>', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
app.set('view engine', 'jade');
|
|
|
|
app.use(function(req, res){
|
|
res.render('blog/post');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<h1>blog post</h1>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
describe('when an error occurs', function(){
|
|
it('should next(err)', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade');
|
|
});
|
|
|
|
app.use(function(err, req, res, next){
|
|
res.end(err.message);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.match(/user is not defined/);
|
|
done();
|
|
});
|
|
})
|
|
})
|
|
|
|
describe('when "view engine" is given', function(){
|
|
it('should render the template', function(done){
|
|
var app = express();
|
|
|
|
app.set('view engine', 'jade');
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.render('email');
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>This is an email</p>');
|
|
done();
|
|
});
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('.render(name, option)', function(){
|
|
it('should render the template', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
var user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade', { user: user });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should expose app.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade', {});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should expose res.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.jade', {});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>tobi</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should give precedence to res.locals over app.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
app.locals.user = { name: 'tobi' };
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'jane' };
|
|
res.render('user.jade', {});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>jane</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should give precedence to res.render() locals over res.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
var jane = { name: 'jane' };
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.jade', { user: jane });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>jane</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
it('should give precedence to res.render() locals over app.locals', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
app.locals.user = { name: 'tobi' };
|
|
var jane = { name: 'jane' };
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade', { user: jane });
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>jane</p>');
|
|
done();
|
|
});
|
|
})
|
|
})
|
|
|
|
describe('.render(name, options, fn)', function(){
|
|
it('should pass the resulting string', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
var tobi = { name: 'tobi' };
|
|
res.render('user.jade', { user: tobi }, function(err, html){
|
|
html = html.replace('tobi', 'loki');
|
|
res.end(html);
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>loki</p>');
|
|
done();
|
|
});
|
|
})
|
|
})
|
|
|
|
describe('.render(name, fn)', function(){
|
|
it('should pass the resulting string', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.locals.user = { name: 'tobi' };
|
|
res.render('user.jade', function(err, html){
|
|
html = html.replace('tobi', 'loki');
|
|
res.end(html);
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.equal('<p>loki</p>');
|
|
done();
|
|
});
|
|
})
|
|
|
|
describe('when an error occurs', function(){
|
|
it('should pass it to the callback', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade', function(err){
|
|
res.end(err.message);
|
|
});
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.match(/is not defined/);
|
|
done();
|
|
});
|
|
})
|
|
|
|
describe('in the callback', function(){
|
|
it('should next(err)', function(done){
|
|
var app = express();
|
|
|
|
app.set('views', __dirname + '/fixtures');
|
|
|
|
app.use(function(req, res){
|
|
res.render('user.jade', function(err){
|
|
req.foo();
|
|
});
|
|
});
|
|
|
|
app.use(function(err, req, res, next){
|
|
res.end(err.message);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.end(function(res){
|
|
res.body.should.match(/has no method 'foo'/);
|
|
done();
|
|
});
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|