【问题标题】:Proxyquire: Cannot Stub Cassandra-driverProxyquire:无法存根 Cassandra 驱动程序
【发布时间】:2018-05-26 10:36:14
【问题描述】:

我正在尝试为单元测试用例模拟 Cassandra,我正在使用 npm Cassandra-driver 来连接/查询 cassandra。 用于模拟存根,这是我的代码。

beforeEach(function () {
        let CassandraClient = sinon.stub();
    CassandraClient.prototype.execute = sinon.stub().returns(new Promise((fulfill, reject) => {
        console.log("Inside execute method");
        fulfill(cassndaraExperimentQueryData);
    }));
    const CassandraClientWrapper = proxyquire('../../../../api/services/index.js', { 'cassandra-driver': { Client: CassandraClient } });
    console.log(typeof CassandraClientWrapper);
    CassandraClientWrapper.init();
    });

这就是我的 index.js 的样子

   const cassandra = require('cassandra-driver');
    module.exports = class DBServices {
    init(){
    const contactPoint = process.env['cassndraIP'] || '127.0.0.1';
    var casssandraClient = new cassandra.Client({
              contactPoints: [contactPoint]
            });
let persistentObject  = new persistent(redisMockClient, casssandraClient)
    }
    }

但这里不是创建模拟对象,而是从连接到实际数据库的 Cassandra-driver 创建对象。

【问题讨论】:

  • 您确定您的路径正确吗?一种方法是在某种设置/初始化文件中获取基本项目路径,然后确保该路径相对于该路径

标签: node.js unit-testing cassandra-3.0 proxyquire


【解决方案1】:

重构你的代码可能允许你删除cassandra-client并移除对proxyquire的依赖。

通过向DBServices 提供构造函数并让调用者“注入”它应该允许更容易测试的依赖项:

    module.exports = class DBServices {
    constructor(cassandra) {
       this.cassandra = cassandra;
    }

    init(){
      const contactPoint = process.env['cassndraIP'] || '127.0.0.1';
      var casssandraClient = new this.cassandra.Client({
        contactPoints: [contactPoint]
      });
      let persistentObject  = new persistent(redisMockClient, casssandraClient)
      }
    }

现在您的测试可以构建存根,导入您的 DBServices 并使用存根创建一个新的DBservices,并运行 DBServices 并对您的存根进行断言!

这现在需要调用者导入实际的生产 cassandra 并对其进行调用:

const cassandra = require('cassandra-driver');
let db = new DBServices(cassandra);
db.init()

如果您实际上可以使用真正的 cassandra-driver,则可以在集成或系统测试中测试这些更高级别的调用者,因为 DBServices 已经过单元测试。

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 2021-09-23
    • 1970-01-01
    • 2017-06-23
    • 2018-05-05
    • 2013-09-06
    • 2017-11-15
    • 2017-01-27
    相关资源
    最近更新 更多