如何获取模块的新实例

how to get new instance of module

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

我这里的问题是第二次测试失败了。它断言 collection 中应该只剩下 2 个项目,但它说它有 3 个项目。

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

var collection = new itemCollection();

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

有人知道吗?

您的 items 不是 "private" 会员。

试试这个:

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