当我想到已经在文件顶部包含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();

09-25 16:06