2

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

我正在尝试针对此类编写测试,但不知道该怎么做。

我的模块看起来像这样

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

函数我的类(项目){
  this.item = 项目;
  返回 this.init();
}

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

module.exports = 主要

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

然后在我的规范文件夹中,我得到了

var main = require("./modules/myClass");

描述(“获取项目”,函数(){
    it("应该返回一个项目",function(){
        var item_obj = main.get_item("first_item");
        期望(item_obj.index).toBe(1);
    })
});

我猜他们是我在规范中创建新课程的一种方式,但我不确定如何或如何导出课程。

4

1 回答 1

2

使用你目前正在做的事情,你必须有

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().

于 2013-10-24T16:41:34.110 回答