NodeJS 和 MongoDB 单元测试

8 javascript mongodb node.js

下午全部

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

如何对使用 MongoDB 的 NodeJS 代码进行单元测试

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

我想测试的示例代码:

数据库服务.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
  };

})();
Run Code Online (Sandbox Code Playgroud)

用户服务.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
  };

})();
Run Code Online (Sandbox Code Playgroud)

Jos*_*rin 0

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