如何获取模块的新实例

时间:2015-01-10 12:45:45

标签: node.js mocha node-modules

我在NodeJS中使用以下模块:

档案:collection_item.js

var items = [];
var exports = module.exports;
exports = module.exports = function() {
};

exports.prototype.addItem = function(item) {
    items.push(item);
};

exports.prototype.deleteItem = function(index) {
    items.splice(index, 1);
};

我也对此代码进行了测试:

var assert = require("assert");
var itemCollection = require('../../item_collection.js');

describe('Item collection', function(){
    describe('#addItem', function(){
        it('should add object to the collection', function(){
            var collection = new itemCollection();

            collection.addItem({
                test: 'aaa'
            });

            assert.equal(collection.count(), 1); // Success
        });
    });

    describe('#deleteItem', function(){
        it('should delete the given item  from the collection', function(){
            var collection = new itemCollection();

            var item1 = {
                test: 'aaa'
            };

            var item2 = {
                test: 'bbb'
            };

            var item3 = {
                test: 'ccc'
            };

            collection.addItem(item1);
            collection.addItem(item2);
            collection.addItem(item3);

            collection.deleteItem(2);

            assert.equal(collection.count(), 2); // Fails, says it has 3 items
        });
    });
});

我在这里遇到的问题是第二次测试失败了。它声称该集合中只剩下2个项目,但表示它有3个项目。

这是因为第一个测试为集合添加了1个项目。但在第二次测试中,我做了一个:

var collection = new itemCollection();

为什么收藏品不是空的?由于某种原因,它仍然有第一次测试中添加的项目。我不明白为什么会这样。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您的items不是“私人”会员。

试试这个:

var exports = module.exports;
exports = module.exports = function() {
    this.items = [];
};

exports.prototype.addItem = function(item) {
    this.items.push(item);
};

exports.prototype.deleteItem = function(index) {
    this.items.splice(index, 1);
};