Node.js:导出类/原型与实例

时间:2017-05-26 11:05:04

标签: javascript node.js dependency-injection node-modules testability

当我在Java中进行大部分编程时,我发现在Node.js模块而不是对象实例中导出类是很有吸引力的,例如:

class Connection {
    constructor(db) {
        this.db = db;
    }
    connect(connectionString) {
        this.db.connect(connectionString);
    }
}
exports.Connection = Connection;

由于这样做需要在依赖模块中多次实例化类,我仍然需要导出已经存在的实例以用于其余的生产代码。我在同一个模块中这样做:

exports.connection = new Connection(require("mongoose"));

这允许一些可测试性,因为真正的依赖关系可以在测试中交换:

const Connection = require("./connection").Connection;

describe("Connection", () => {
    it("connects to a db", () => {
        const connection = new Connection({connect: () => {}});
        // ...
    });
});

这种方法有效,但它有一种奇怪的感觉,因为我在这里混合了两种模式:导出原型(用于单元测试)和实例(用于生产代码)。这可以接受吗?我应该继续这个还是改变一些不同的东西?如果是这样,首选模式是什么?

0 个答案:

没有答案