当我想到已经在文件顶部包含express的代码时,我正在尝试对下面的代码进行测试。您能通过猴子在快速对象加载后如何修补快速对象吗?
var express = require('express')
Helper = (function() {
var HelperObject = function(params) {
this.directories = params.directories;
};
HelperObject.prototype.addStaticPath = function(app) {
for(i = 0; i < this.directories.length; i++) {
var static = express.static('/public');
app.use(static);
}
};
return HelperObject;
})();
最佳答案
问题是,当您创建节点模块时,所需的模块已绑定在模块的关闭位置,并且您无法开始对其进行监视,因为它在测试中不可见。
在Gently中,您可以覆盖require,但是它将在代码中添加样板测试相关的代码。
从文档:
返回捕获所有引用的新require函数
所需的模块被轻轻地劫持。
要使用此功能,请在“ my-module.js”中包含这样的一行。
if (global.GENTLY) require = GENTLY.hijack(require);
var sys = require('sys');
exports.hello = function() {
sys.log('world');
};
现在,您可以为上述模块编写测试:
var gently = global.GENTLY = new (require('gently'))
, myModule = require('./my-module');
gently.expect(gently.hijacked.sys, 'log', function(str) {
assert.equal(str, 'world');
});
myModule.hello();