我正在编写一个node.js模块,并且我的模块有一个私有类。

我正在尝试针对此类编写测试,但无法弄清楚该如何做。

我的模块看起来像这样

var main = function(get_item){
   var main_item = new MyClass(get_item);
   返回main_item
}

函数MyClass(item){
  this.item = item;
  返回this.init();
}

MyClass.prototype = {
   初始化:function(){
        返回find_item();
    },
   find_item:function(){
     //做一堆东西来查找一个项目
    },
    update_item:function(){
    //做一堆东西来更新物品
   },
  //这里有更多方法
}

module.exports =主要

//可能需要打开和关闭进行测试
module.exports = new MyClass // ???不知道该怎么做



然后在我的spec文件夹中

var main = require(“ ../ modules / myClass”);

describe(“获取项目”,function(){
    it(“应该退货”,function(){
        var item_obj = main.get_item(“ first_item”);
        Expect(item_obj.index).toBe(1);
    })
});



我猜想它们是我可以在规范中创建新类的方法,但是我不确定如何或如何导出该类。

最佳答案

使用您当前正在做的事情,您将不得不

module.exports = { main: main, MyClass: MyClass }


然后在规范中使用new mymodule.MyClass实例化您的类。但是,这意味着您的类的“常规”用户必须执行mymodule.main("Item")而不是mymodule("Item"),这会更改模块的原始接口。

我不知道我要建议的是模式还是反模式,但这是解决它的一种方法:

module.exports = main;
module.exports.MyClass = MyClass; // only if testing


就是说,您的模块与常规用户的接口保持不变,并且您的规范可以使用new mymodule.MyClass()创建该类的实例。

10-06 13:20
查看更多