NodeJS 和 MongoDB 单元测试

Posted

技术标签:

【中文标题】NodeJS 和 MongoDB 单元测试【英文标题】:NodeJS & MongoDB Unit Testing 【发布时间】:2018-10-01 00:40:45 【问题描述】:

下午

我一直在努力寻找解决以下问题的可靠方法。

我如何单元测试使用 MongoDB 的 NodeJS 代码?

我想编写独立的单元测试,而不是为了测试而实际启动任何数据库。

我要测试的示例代码:

DatabaseService.js

var mongodb       = require('mongodb');

var exports = module.exports = (function () 

  var MongoClient   = mongodb.MongoClient;
  var db            = null;

  function getDB()
    return db;
  

  const connect = (
    options
  ) => 

    return new Promise((resolve, reject) => 

      var host      = options.host;
      var port      = options.port;
      var dbName    = options.dbName;

      var url = 'mongodb://' + host + ':' + port;

      // Use connect method to connect to the server
      MongoClient.connect(url, function(err, client) 

        if(error)
          return reject(false);
        

        const db = client.db(dbName);

        return resolve(true);

      );

    );
  ;

  return 
    connect: connect,
    getDB: getDB
  ;

)();

UserService.js

var DatabaseService   = require("./DatabaseService");

var exports = module.exports = (function () 

  const createUser = (
    options
  ) => 

    return new Promise((resolve, reject) => 

      var db = DatabaseService.getDB();

      var firstName = options.firstName;
      var lastName = options.lastName;

      db.collection('users').insertOne(
          firstName: firstName,
          lastName: lastName
        ,
        function(error, result) 

          if (error)
            return reject(false);
          

          return resolve(result);

      );

    );

  ;

  return 
    createUser: createUser
  ;

)();

【问题讨论】:

你可以使用jest-mongodb 【参考方案1】:

您可以选择使用测试库来模拟它,例如之前评论过的 jest-mongodb。或者您需要将您的业务代码与 mongodb 样板隔离开来,并且不对样板进行单元测试。

【讨论】:

以上是关于NodeJS 和 MongoDB 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

在 NestJS 中使用 Jest 和 MongoDB 进行单元测试

使用 MongoDB 进行单元测试

nodejs 学习五 单元测试一

如何使用 mongoose、mocha 和 chai 编写用于向 mongodb 插入和检索对象的单元测试?

在Nodejs中贯彻单元测试

MongoDB / Mongoose 单元测试 - 最佳实践? [关闭]