Ensure that we can add res.marko to multiple express instances, but it will not be applied multiple times to the same express instance.

This commit is contained in:
Michael Rawlings 2016-05-06 11:06:12 -07:00
parent 5b37ff54cd
commit 67521efbab
2 changed files with 38 additions and 2 deletions

View File

@ -28,3 +28,5 @@ response.marko = response.marko || function(template, data) {
template.render(data, res);
};
delete require.cache[__filename];

View File

@ -10,17 +10,51 @@ var express = require('express');
var request = require('request');
var fs = require('fs');
var markoExpressPath = require.resolve('../express');
require('../node-require').install();
describe('render', function() {
describe('express', function() {
var autoTestDir = path.join(__dirname, 'autotests/express');
describe('registration', function() {
it('should not register the res.marko function multiple times', function() {
require(markoExpressPath);
var fn = express.response.marko;
require(markoExpressPath);
chai.expect(express.response.marko).to.equal(fn);
});
it('should be able to register for multiple express instances', function() {
// test res.marko is added to the real express response
require(markoExpressPath);
chai.expect(express.response.marko).to.be.a('function');
// set up an express mock object and hijack require
var expressMock = { response:{} };
var _require = module.require;
module.require = function() {
if(arguments[0] === 'express') return expressMock;
return _require.apply(module, arguments);
};
// check that res.marko is added to the mocked express response
require(markoExpressPath);
chai.expect(expressMock.response.marko).to.be.a('function');
// return require to its original state
module.require = _require;
});
})
autotest.scanDir(
autoTestDir,
function run(dir, helpers, done) {
var mainPath = path.join(dir, 'test.js');
var templatePath = path.join(dir, 'template.marko');
var markoExpressPath = require.resolve('../express');
var main = fs.existsSync(mainPath) ? require(mainPath) : {};
var loadOptions = main && main.loadOptions;