2

このファイルの先頭にすでに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

問題は、ノード モジュールを作成するときに、必要なモジュールがモジュールのクロージャにバインドされており、テストで表示されないためにスパイを開始できないことです。

require をオーバーライドできるGentlyがありますが、コードにボイラープレート テスト関連のコードを振りかけることになります。

ドキュメントから:

必要なすべてのモジュールへの参照をgentle.hijackedにキャッチする新しい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 に答える