如何在茉莉花需要的时候把它expression出来?

我试图得到下面的代码,当我发现我已经包含在这个文件的顶部。 你可以在猴子已经加载后如何修补快递对象吗?

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; })(); 

问题是,当你创build一个节点模块时,所需的模块被绑定在模块的closures中,你不能开始监视它,因为它在你的testing中是不可见的。

轻轻地 ,你可以覆盖的要求,但它会洒你的代码与样板testing相关的代码。

从文档:

返回一个新的require函数,它将所有必需的模块的引用捕获到轻微劫持。

要使用这个函数,在你的'my-module.js'中包含这样一行。

 if (global.GENTLY) require = GENTLY.hijack(require); var sys = require('sys'); exports.hello = function() { sys.log('world'); }; 

现在你可以为上面的模块写一个testing:

 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();