如何模拟猫鼬?

Jac*_*son 6 mocha.js mongoose node.js

我应该在没有 mongodb 的情况下在 node+express+mongoose+swagger 应用程序上运行测试,我需要模块来模拟 mongoose(仅用于测试)。我试过 mock-mongoose 和 mockgoose,但我有错误:( 也许我失败了.. 或者这个模块不能帮助我我希望你的想法!

我创建了示例骨架:https : //github.com/miroslav-grabinskiy/swagger-server-mock-tested

我只需要在测试中模拟,我不需要测试猫鼬,比如:

Model.find()
Run Code Online (Sandbox Code Playgroud)

我需要像链接一样的测试 API(路由)

PS 模拟猫鼬不使用承诺 :(

Jac*_*son 4

我找到了解决方案 - 使用mockgoose

"use strict";

const config = require(appRoot + '/config');
const Mongoose = require('mongoose').Mongoose;
const mongoose = new Mongoose();

const DB_NAME = "rbTest";
const DOCKER_MONGODB_URI = "mongodb://mongo:27017/" + DB_NAME;
const LOCAL_MONGODB_URI = "mongodb://localhost:27017/" + DB_NAME + "?socketTimeoutMS=120000";
const myMongo = process.env.DOCKER ? DOCKER_MONGODB_URI : LOCAL_MONGODB_URI;

mongoose.Promise = global.Promise;

if (process.env.NODE_ENV === 'testing') {
  const Mockgoose = require('mockgoose').Mockgoose;
  const mockgoose = new Mockgoose(mongoose);

  mockgoose.prepareStorage().then(function() {
    mongoose.connect(myMongo, function(err) {
      console.log('connected');
    });
  });
} else {
  mongoose.connect(myMongo, config.get('mongoose:options'));
}

module.exports = mongoose;
Run Code Online (Sandbox Code Playgroud)

  • 只是想在这里添加一个简短的评论,当前版本的 Mockgoose (7.3.5) 存在安全漏洞,并且该项目似乎已被放弃,已经八个月没有被触及了。 (4认同)
  • 我可以确认,这个项目不再有效了。目前正在寻找替代方案,如果我找到任何替代方案,我会在这里发布 (2认同)