如何对连接到Mongo的方法进行单元测试,而不实际连接到Mongo?

6 浏览
0 Comments

如何对连接到Mongo的方法进行单元测试,而不实际连接到Mongo?

我正在尝试编写一个测试来测试连接到mongo的方法,但实际上我并不想要求mongo运行并且实际上连接到它才能使我的测试成功通过。

以下是我的当前测试,当我的mongo守护进程正在运行时,它是成功的。

描述('使用有效的mongo字符串参数', function() {

it('应该返回一个被拒绝的promise', function(done) {

var con = mongoFactory.getConnection('mongodb://localhost:27017');

expect(con).to.be.fulfilled;

done();

});

});

mongoFactory.getConnection代码:

getConnection: function getConnection(connectionString) {

// 在这里执行操作

// 初始化连接

MongoClient.connect(connectionString, function(err, database) {

if (err) {

def.reject(err);

}

def.resolve(database);

});

return def.promise;

}

0
0 Comments

如何对连接到Mongo的方法进行单元测试,而不实际连接到Mongo?

问题原因:

1. MongoDB的查询语言复杂,为了确保查询运行正常并且应用程序对结果作出正确响应,应该在执行测试时保持MongoDB运行。

2. 但是,不应该在生产系统上运行测试,而是在集成环境之外的辅助系统上运行测试。

3. 在CI软件的同一台机器上或者相对靠近CI软件的机器上设置一个低资源占用的环境即可。

解决方法:

1. 为CI安装一个专用的mongod服务。如果涉及到repl sets和sharding等问题,可以通过在同一台机器上运行多个mongod实例和一个mongos实例来模拟群集环境。

2. 在应用程序中使用特定于环境的配置,可以通过在.json文件中嵌入配置或者在/etc、/home/user/.your-app等位置存放配置文件,并根据NODE_ENV变量加载不同的配置。

3. 在应用程序/测试套件中包含测试相关的fixtures。MongoDB的Node.js驱动程序支持一些辅助库,如mongodb-fixtures和node-database-cleaner,fixtures提供了一个可用于测试的工作和一致的数据集。

构建/测试步骤:

1. 使用node-database-cleaner清空相关的数据库。

2. 使用mongodb-fixtures将fixtures填充到空的数据库中。

3. 执行构建和测试。

4. 重复以上步骤。

另一方面,如果决定不运行MongoDB,则可以通过使用ORM将数据存储调用与驱动程序进行抽象来达到目标。通过使用ORM,仍然需要fixtures和环境配置,但不需要安装MongoDB。但是,这种方法的缺点是受所选择的ORM的限制。

0
0 Comments

问题的原因是,需要对一个连接到MongoDB的方法进行单元测试,但是又不想实际连接到MongoDB数据库。

解决方法是使用tingodb。tingodb是一个嵌入式JavaScript数据库,与MongoDB在API层面上兼容。它支持MongoDB的大部分常用功能,因此可以用来替代MongoDB进行单元测试。

下面是使用tingodb进行单元测试的示例代码:

const assert = require('assert');
const { Db } = require('tingodb')();
describe('MyMethod', () => {
  it('should connect to MongoDB', () => {
    // Create a TingoDB instance
    const db = new Db('/path/to/db', {});
    // Call the method that connects to MongoDB
    const result = myMethod(db);
    // Perform assertions on the result
    assert.equal(result, expected);
  });
});
function myMethod(db) {
  // Code that connects to MongoDB and performs some operations
  // ...
  return result;
}

在这个示例中,我们使用tingodb的Db类创建了一个TingoDB实例,并将其传递给需要测试的方法myMethod。在myMethod中,我们可以模拟连接到MongoDB并执行一些操作。最后,我们可以使用assert来断言方法的返回值是否符合预期。

通过使用tingodb,我们可以在不实际连接到MongoDB的情况下对方法进行单元测试,从而提高测试效率和便捷性。

希望这篇文章能帮助你解决问题!

0