UNPKG

2.61 kBJavaScriptView Raw
1var request = require('supertest');
2var assert = require('assert');
3var hbs = require('..');
4
5
6function stripWs(s) {
7 return s.replace(/\s+/g, '');
8}
9
10function createLocals(which, viewsDir, locals) {
11 if (!locals) locals = {};
12 var opts = {};
13 if (which === 'express3') {
14 opts.settings = {
15 views: viewsDir
16 };
17 opts.cache = process.env.NODE_ENV === 'production';
18 opts.settings.views = viewsDir;
19 for (var k in locals) {
20 if (!locals.hasOwnProperty(k)) continue;
21 opts[k] = locals[k];
22 }
23 }
24 return opts;
25}
26
27describe('layouts', function() {
28 var app;
29
30 beforeEach(function() {
31 var example = require('../example/app');
32 app = example.create(hbs.create());
33 });
34
35
36 describe('layoutsDir', function() {
37 var app;
38
39 beforeEach(function() {
40 app = require('../example/app-layoutsDir');
41 });
42
43 it('should render layout declared in markup', function(done) {
44 request(app)
45 .get('/fruits')
46 .expect(/DECLARATIVE LAYOUT/, done);
47 });
48
49 it('should allow specifying layout in locals without dir', function(done) {
50 request(app)
51 .get('/veggies')
52 .expect(/PROGRAMMATIC LAYOUT/, done);
53 });
54
55 it('should still allow specifying layout in locals with dir', function(done) {
56 request(app)
57 .get('/veggies/explicit-dir')
58 .expect(/PROGRAMMATIC LAYOUT/, done);
59 });
60 });
61
62
63 describe('options.layout', function() {
64 var dirname = __dirname + '/views/disableLayoutDirective';
65
66 it ('should process template-specified layout without option', function(done) {
67 var render = hbs.create().express3({
68 });
69 var locals = createLocals('express3', dirname);
70
71 render(dirname + '/index.hbs', locals, function(err, html) {
72 assert.equal('<dld>dld</dld>', stripWs(html));
73 done();
74 });
75 });
76
77 it ('should allow options.layout to be specified', function(done) {
78 var render = hbs.create().express3({
79 });
80 var locals = createLocals('express3', dirname, { layout: 'layouts/default' });
81
82 render(dirname + '/aside.hbs', locals, function(err, html) {
83 assert.equal('<dld>aside</dld>', stripWs(html));
84 done();
85 });
86 });
87
88 it ('should not process template-specified layout when options.layout is falsy', function(done) {
89 var render = hbs.create().express3({
90 });
91 var locals = createLocals('express3', dirname, { layout: false });
92
93 render(dirname + '/index.hbs', locals, function(err, html) {
94 assert.equal('dld', stripWs(html));
95 done();
96 });
97 });
98 });
99
100});