1 | var request = require('supertest');
|
2 | var path = require('path');
|
3 | var rewire = require('rewire');
|
4 | var assert = require('assert');
|
5 | var fs = require('fs');
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | function createApp(env) {
|
16 | var readCounts = {};
|
17 | var hbs = rewire('../lib/hbs');
|
18 | hbs.__set__('fs', {
|
19 | readFileSync: function(filename, encoding) {
|
20 | if (typeof readCounts[filename] === 'undefined') {
|
21 | readCounts[filename] = 1;
|
22 | } else {
|
23 | readCounts[filename] += 1;
|
24 | }
|
25 |
|
26 | return fs.readFileSync(filename, encoding);
|
27 | },
|
28 |
|
29 | readFile: function(filename, encoding, cb) {
|
30 | if (typeof readCounts[filename] === 'undefined') {
|
31 | readCounts[filename] = 1;
|
32 | } else {
|
33 | readCounts[filename] += 1;
|
34 | }
|
35 |
|
36 | fs.readFile(filename, encoding, cb);
|
37 | },
|
38 | existsSync: function(filename, encoding) {
|
39 | return fs.existsSync(filename, encoding);
|
40 | }
|
41 | });
|
42 |
|
43 |
|
44 | var example = require('../example/app');
|
45 | var app = example.create(hbs, env);
|
46 | return {app: app, readCounts: readCounts};
|
47 | }
|
48 |
|
49 |
|
50 | describe('express-hbs', function() {
|
51 | describe('cache', function() {
|
52 |
|
53 | it('should not cache layout in `development`', function(done) {
|
54 | var mock = createApp('development');
|
55 |
|
56 | request(mock.app)
|
57 | .get('/')
|
58 | .end(function(err) {
|
59 | assert.ifError(err);
|
60 |
|
61 | request(mock.app)
|
62 | .get('/')
|
63 | .expect(/DEFAULT LAYOUT/)
|
64 | .end(function(err) {
|
65 | assert.ifError(err);
|
66 |
|
67 | var filename = path.resolve(__dirname, '../example/views/layout/default.hbs');
|
68 | assert.equal(mock.readCounts[filename], 2);
|
69 | done();
|
70 | });
|
71 | });
|
72 | });
|
73 |
|
74 | it('should cache layout in `production` reading file once', function(done) {
|
75 | var mock = createApp('production');
|
76 |
|
77 |
|
78 | request(mock.app)
|
79 | .get('/')
|
80 | .end(function(err) {
|
81 | assert.ifError(err);
|
82 |
|
83 | request(mock.app)
|
84 | .get('/')
|
85 | .expect(/DEFAULT LAYOUT/)
|
86 | .end(function(err, res) {
|
87 | assert.ifError(err);
|
88 |
|
89 | var filename = path.resolve(__dirname, '../example/views/layout/default.hbs');
|
90 | assert.equal(mock.readCounts[filename], 1);
|
91 | done();
|
92 | });
|
93 | });
|
94 | });
|
95 |
|
96 | it('should not cache partials in `development`', function(done) {
|
97 | var mock = createApp('development');
|
98 |
|
99 | request(mock.app)
|
100 | .get('/veggies')
|
101 | .expect(/just a comment/)
|
102 | .end(function(err) {
|
103 | assert.ifError(err);
|
104 | request(mock.app)
|
105 | .get('/veggies')
|
106 | .expect(/just a comment/)
|
107 | .end(function(err) {
|
108 | assert.ifError(err);
|
109 |
|
110 | var filename = path.resolve(__dirname, '../example/views/partials/sub/comment.hbs');
|
111 | assert.equal(mock.readCounts[filename], 2);
|
112 | done();
|
113 | });
|
114 | });
|
115 | });
|
116 |
|
117 | it('should cache partials in `production', function (done) {
|
118 | var mock = createApp('production');
|
119 |
|
120 | request(mock.app)
|
121 | .get('/veggies')
|
122 | .expect(/just a comment/)
|
123 | .end(function(err) {
|
124 | assert.ifError(err);
|
125 | request(mock.app)
|
126 | .get('/veggies')
|
127 | .expect(/just a comment/)
|
128 | .end(function(err) {
|
129 | assert.ifError(err);
|
130 |
|
131 | var filename = path.resolve(__dirname, '../example/views/partials/sub/comment.hbs');
|
132 | assert.equal(mock.readCounts[filename], 1);
|
133 | done();
|
134 | });
|
135 | });
|
136 | });
|
137 | });
|
138 | });
|