4

次のようなモジュール「sitescollection」があります。

var site = require('./site');    // <- this should be stubbed

var sitesCollection = function(spec) {

  var that = {};

  that.sites = {};

  that.findOrCreateById = function(id) {
    if (typeof(that.sites[id]) == "undefined") {
      that.sites[id] = site({id: id});            // <- its used here
    }
    return that.sites[id];
  };

  return that;
};

module.exports = sitesCollection;

したがって、sitescollection 内では、site はエクスポートされないモジュールです。しかし、コード内では、私はそれを使用しています。今、#findOrCreateById() のジャスミン仕様を書いています。

findOrCreateBy() 関数を指定したいと思います。しかし、仕様は実装から独立している必要があるため、site() 関数をスタブしたいと考えています。スパイされたメソッドをどこに作成する必要がありますか?

var sitescollection = require('../../lib/sitescollection');

describe("#findOrCreateById", function() {
  it("should return the site", function() {
    var sites = sitescollection();
    mysite = { id: "bla" };
    // Here i want to stub the site() method inside the sitescollection module.
    // spyOn(???,"site").andRetur(mysite);
    expect(sites.findOrCreateById(mysite.id)).toEqual(mysite);
  });
});
4

1 に答える 1