deps: body-parser@1.20.0
[express.git] / test / app.engine.js
blob214510a94c0db83279c82826680e3635b58c26da
1 'use strict'
3 var assert = require('assert')
4 var express = require('../')
5   , fs = require('fs');
6 var path = require('path')
8 function render(path, options, fn) {
9   fs.readFile(path, 'utf8', function(err, str){
10     if (err) return fn(err);
11     str = str.replace('{{user.name}}', options.user.name);
12     fn(null, str);
13   });
16 describe('app', function(){
17   describe('.engine(ext, fn)', function(){
18     it('should map a template engine', function(done){
19       var app = express();
21       app.set('views', path.join(__dirname, 'fixtures'))
22       app.engine('.html', render);
23       app.locals.user = { name: 'tobi' };
25       app.render('user.html', function(err, str){
26         if (err) return done(err);
27         assert.strictEqual(str, '<p>tobi</p>')
28         done();
29       })
30     })
32     it('should throw when the callback is missing', function(){
33       var app = express();
34       assert.throws(function () {
35         app.engine('.html', null);
36       }, /callback function required/)
37     })
39     it('should work without leading "."', function(done){
40       var app = express();
42       app.set('views', path.join(__dirname, 'fixtures'))
43       app.engine('html', render);
44       app.locals.user = { name: 'tobi' };
46       app.render('user.html', function(err, str){
47         if (err) return done(err);
48         assert.strictEqual(str, '<p>tobi</p>')
49         done();
50       })
51     })
53     it('should work "view engine" setting', function(done){
54       var app = express();
56       app.set('views', path.join(__dirname, 'fixtures'))
57       app.engine('html', render);
58       app.set('view engine', 'html');
59       app.locals.user = { name: 'tobi' };
61       app.render('user', function(err, str){
62         if (err) return done(err);
63         assert.strictEqual(str, '<p>tobi</p>')
64         done();
65       })
66     })
68     it('should work "view engine" with leading "."', function(done){
69       var app = express();
71       app.set('views', path.join(__dirname, 'fixtures'))
72       app.engine('.html', render);
73       app.set('view engine', '.html');
74       app.locals.user = { name: 'tobi' };
76       app.render('user', function(err, str){
77         if (err) return done(err);
78         assert.strictEqual(str, '<p>tobi</p>')
79         done();
80       })
81     })
82   })