2013-10-24 2 views
1

Я пишу модуль node.js, а мой модуль имеет частный класс.test node.js класс в модуле

Я пытаюсь написать тесты против этого класса, но не могу понять, как это сделать.

Мой модуль выглядит следующим образом

 
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); 
    }) 
}); 

Я предполагаю, что их способ для меня, чтобы создать новый класс в моей спецификации , но я не уверен, как и как экспортировать класс.

ответ

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 

Это интерфейс вашего модуля для обычных пользователей остается то же, и ваш spec может создать экземпляр класса, используя new mymodule.MyClass().