2

当我想到我已经在这个文件的顶部包含了 express 时,我试图让下面的代码被测试。你能知道如何在 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;
})();
4

1 回答 1

2

问题是,当您创建一个节点模块时,所需的模块绑定在模块的闭包中,您无法开始监视它,因为它在您的测试中不可见。

您可以在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();
于 2012-09-10T19:17:40.363 回答