在模块中testingnode.js类

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

我试图写这个类的testing,但不知道如何做到这一点。

我的模块看起来像这样

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

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

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

 module.exports = main

 //可能打开和closurestesting
 module.exports = new MyClass // ??? 不知道如何做到这一点

然后在我的spec文件夹里

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

描述(“get item”,function(){
    它(“应该返回一个项目”,function(){
         var item_obj = main.get_item(“first_item”);
        期望(item_obj.index).toBe(1);
     })
 });

我猜他们是我创build一个新的类的方式,但我不知道如何,或者如何导出类。

使用你现在正在做的,你将不得不有

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()来创build一个类的实例。