node.js - 测试模块中的 node.js 类

标签 node.js class module private jasmine-node

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

我正在尝试针对此类编写测试,但不知道如何做到这一点。

我的模块看起来像这样

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

function MyClass(item){
  this.item = item;
  return this.init();
}

MyClass.prototype = {
   init: function(){
        return find_item();
    },
   find_item: function(){
     // does a bunch of stuff to look up an item
    },
    update_item: function(){
    // does a bunch of stuff to update the item
   },
  // a bunch more methods here
}

module.exports = main

// probably turn on and off for testing
module.exports = new MyClass //??? not sure how to do this

然后在我的规范文件夹中我有

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

describe("get item",function(){
    it("should return an item",function(){
        var item_obj = main.get_item("first_item");
        expect(item_obj.index).toBe(1);
    })
});

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

最佳答案

使用您当前正在做的事情,您必须拥有

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

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

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

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

这是,您的模块对普通用户的接口(interface)保持不变,并且您的规范可以使用 new mymodule.MyClass() 创建该类的实例。

关于node.js - 测试模块中的 node.js 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19556928/

相关文章:

html - 一个元素可以同时拥有 id 和 class 吗?

java - 第一次尝试使用多个类时出现 NullPointerException 错误

Linux 内核模块——安全风险?

php - 将较大的 Laravel 5 项目分解为模块的正确方法是什么?

node.js - 如何在不同时区的同一时间运行 cron?

node.js - 使用 docker 的两个 meteor 项目 - ECONNREFUSED 127.0.0.1 :8082

matlab - 解决与内置函数的名称冲突,另请参阅文档部分

SASS 内置模块错误 : Invalid CSS after

javascript - 显示从nodejs服务器发送的文件数据,就像在angularjs中一样

node.js - NodeJS 版本号混淆