mirror of
https://github.com/zebrajr/express.git
synced 2025-12-06 00:19:48 +01:00
tests: run render tests with internal template engine
This commit is contained in:
parent
6c8bcd5c4e
commit
91824514ce
|
|
@ -1,14 +1,15 @@
|
|||
|
||||
var express = require('../');
|
||||
var express = require('..');
|
||||
var tmpl = require('./support/tmpl');
|
||||
|
||||
describe('app', function(){
|
||||
describe('.render(name, fn)', function(){
|
||||
it('should support absolute paths', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render(__dirname + '/fixtures/user.jade', function(err, str){
|
||||
app.render(__dirname + '/fixtures/user.tmpl', function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -16,9 +17,9 @@ describe('app', function(){
|
|||
})
|
||||
|
||||
it('should support absolute paths with "view engine"', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render(__dirname + '/fixtures/user', function(err, str){
|
||||
|
|
@ -29,12 +30,12 @@ describe('app', function(){
|
|||
})
|
||||
|
||||
it('should expose app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render('user.jade', function(err, str){
|
||||
app.render('user.tmpl', function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -42,12 +43,12 @@ describe('app', function(){
|
|||
})
|
||||
|
||||
it('should support index.<engine>', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.render('blog/post', function(err, str){
|
||||
app.render('blog/post', function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<h1>blog post</h1>');
|
||||
done();
|
||||
|
|
@ -77,10 +78,11 @@ describe('app', function(){
|
|||
|
||||
describe('when the file does not exist', function(){
|
||||
it('should provide a helpful error', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.render('rawr.jade', function(err){
|
||||
err.message.should.equal('Failed to lookup view "rawr.jade" in views directory "' + __dirname + '/fixtures"');
|
||||
app.render('rawr.tmpl', function (err) {
|
||||
err.message.should.equal('Failed to lookup view "rawr.tmpl" in views directory "' + __dirname + '/fixtures"');
|
||||
done();
|
||||
});
|
||||
})
|
||||
|
|
@ -88,11 +90,11 @@ describe('app', function(){
|
|||
|
||||
describe('when an error occurs', function(){
|
||||
it('should invoke the callback', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.render('user.jade', function(err, str){
|
||||
app.render('user.tmpl', function (err, str) {
|
||||
// nextTick to prevent cyclic
|
||||
process.nextTick(function(){
|
||||
err.message.should.match(/Cannot read property 'name' of undefined/);
|
||||
|
|
@ -104,11 +106,11 @@ describe('app', function(){
|
|||
|
||||
describe('when an extension is given', function(){
|
||||
it('should render the template', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.render('email.jade', function(err, str){
|
||||
app.render('email.tmpl', function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>This is an email</p>');
|
||||
done();
|
||||
|
|
@ -118,9 +120,9 @@ describe('app', function(){
|
|||
|
||||
describe('when "view engine" is given', function(){
|
||||
it('should render the template', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.render('email', function(err, str){
|
||||
|
|
@ -219,13 +221,13 @@ describe('app', function(){
|
|||
|
||||
describe('.render(name, options, fn)', function(){
|
||||
it('should render the template', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
var user = { name: 'tobi' };
|
||||
|
||||
app.render('user.jade', { user: user }, function(err, str){
|
||||
app.render('user.tmpl', { user: user }, function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -233,12 +235,12 @@ describe('app', function(){
|
|||
})
|
||||
|
||||
it('should expose app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render('user.jade', {}, function(err, str){
|
||||
app.render('user.tmpl', {}, function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -246,13 +248,13 @@ describe('app', function(){
|
|||
})
|
||||
|
||||
it('should give precedence to app.render() locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
var jane = { name: 'jane' };
|
||||
|
||||
app.render('user.jade', { user: jane }, function(err, str){
|
||||
app.render('user.tmpl', { user: jane }, function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>jane</p>');
|
||||
done();
|
||||
|
|
@ -292,3 +294,11 @@ describe('app', function(){
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
function createApp() {
|
||||
var app = express();
|
||||
|
||||
app.engine('.tmpl', tmpl);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
|
|
|||
1
test/fixtures/blog/post/index.jade
vendored
1
test/fixtures/blog/post/index.jade
vendored
|
|
@ -1 +0,0 @@
|
|||
h1 blog post
|
||||
1
test/fixtures/blog/post/index.tmpl
vendored
Normal file
1
test/fixtures/blog/post/index.tmpl
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
<h1>blog post</h1>
|
||||
1
test/fixtures/email.jade
vendored
1
test/fixtures/email.jade
vendored
|
|
@ -1 +0,0 @@
|
|||
p This is an email
|
||||
1
test/fixtures/email.tmpl
vendored
Normal file
1
test/fixtures/email.tmpl
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
<p>This is an email</p>
|
||||
1
test/fixtures/pet.jade
vendored
1
test/fixtures/pet.jade
vendored
|
|
@ -1 +0,0 @@
|
|||
p #{first} #{last} is a #{species}
|
||||
1
test/fixtures/user.jade
vendored
1
test/fixtures/user.jade
vendored
|
|
@ -1 +0,0 @@
|
|||
p= user.name
|
||||
1
test/fixtures/user.tmpl
vendored
Normal file
1
test/fixtures/user.tmpl
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
<p>$user.name</p>
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
|
||||
var express = require('../')
|
||||
, request = require('supertest');
|
||||
var express = require('..');
|
||||
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 = express();
|
||||
var app = createApp();
|
||||
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render(__dirname + '/fixtures/user.jade');
|
||||
res.render(__dirname + '/fixtures/user.tmpl');
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -19,10 +20,10 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should support absolute paths with "view engine"', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.locals.user = { name: 'tobi' };
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render(__dirname + '/fixtures/user');
|
||||
|
|
@ -34,13 +35,13 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should expose app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.jade');
|
||||
res.render('user.tmpl');
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -49,10 +50,10 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should support index.<engine>', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('blog/post');
|
||||
|
|
@ -65,12 +66,12 @@ describe('res', function(){
|
|||
|
||||
describe('when an error occurs', function(){
|
||||
it('should next(err)', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.jade');
|
||||
res.render('user.tmpl');
|
||||
});
|
||||
|
||||
app.use(function(err, req, res, next){
|
||||
|
|
@ -85,9 +86,9 @@ describe('res', function(){
|
|||
|
||||
describe('when "view engine" is given', function(){
|
||||
it('should render the template', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('view engine', 'jade');
|
||||
app.set('view engine', 'tmpl');
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -103,14 +104,14 @@ describe('res', function(){
|
|||
|
||||
describe('.render(name, option)', function(){
|
||||
it('should render the template', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
var user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.jade', { user: user });
|
||||
res.render('user.tmpl', { user: user });
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -119,13 +120,13 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should expose app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.jade');
|
||||
res.render('user.tmpl');
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -134,13 +135,13 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should expose res.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.locals.user = { name: 'tobi' };
|
||||
res.render('user.jade');
|
||||
res.render('user.tmpl');
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -149,14 +150,14 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should give precedence to res.locals over app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.locals.user = { name: 'jane' };
|
||||
res.render('user.jade', {});
|
||||
res.render('user.tmpl', {});
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -165,14 +166,14 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should give precedence to res.render() locals over res.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
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 });
|
||||
res.render('user.tmpl', { user: jane });
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -181,14 +182,14 @@ describe('res', function(){
|
|||
})
|
||||
|
||||
it('should give precedence to res.render() locals over app.locals', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
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 });
|
||||
res.render('user.tmpl', { user: jane });
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -199,13 +200,13 @@ describe('res', function(){
|
|||
|
||||
describe('.render(name, options, fn)', function(){
|
||||
it('should pass the resulting string', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
var tobi = { name: 'tobi' };
|
||||
res.render('user.jade', { user: tobi }, function(err, html){
|
||||
res.render('user.tmpl', { user: tobi }, function (err, html) {
|
||||
html = html.replace('tobi', 'loki');
|
||||
res.end(html);
|
||||
});
|
||||
|
|
@ -219,13 +220,13 @@ describe('res', function(){
|
|||
|
||||
describe('.render(name, fn)', function(){
|
||||
it('should pass the resulting string', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.locals.user = { name: 'tobi' };
|
||||
res.render('user.jade', function(err, html){
|
||||
res.render('user.tmpl', function (err, html) {
|
||||
html = html.replace('tobi', 'loki');
|
||||
res.end(html);
|
||||
});
|
||||
|
|
@ -238,12 +239,12 @@ describe('res', function(){
|
|||
|
||||
describe('when an error occurs', function(){
|
||||
it('should pass it to the callback', function(done){
|
||||
var app = express();
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.jade', function(err){
|
||||
res.render('user.tmpl', function (err) {
|
||||
res.end(err.message);
|
||||
});
|
||||
});
|
||||
|
|
@ -255,3 +256,11 @@ describe('res', function(){
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
function createApp() {
|
||||
var app = express();
|
||||
|
||||
app.engine('.tmpl', tmpl);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
|
|
|||
35
test/support/tmpl.js
Normal file
35
test/support/tmpl.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
var fs = require('fs');
|
||||
|
||||
var variableRegExp = /\$([0-9a-zA-Z\.]+)/g;
|
||||
|
||||
module.exports = function renderFile(fileName, options, callback) {
|
||||
function onReadFile(err, str) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
str = str.replace(variableRegExp, generateVariableLookup(options));
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
|
||||
callback(err, str);
|
||||
}
|
||||
|
||||
fs.readFile(fileName, 'utf8', onReadFile);
|
||||
};
|
||||
|
||||
function generateVariableLookup(data) {
|
||||
return function variableLookup(str, path) {
|
||||
var parts = path.split('.');
|
||||
var value = data;
|
||||
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
value = value[parts[i]];
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user