在简单的单元测试中使用 mockgoose 非常简单。但是,对于如何在验收或集成测试中使用 mockgoose 或其他模拟解决方案,我有点模糊。
给定一个简单的 express/MongoDB 应用程序,如下所示:
/*app.js*/
const express = require('express')
const app = express()
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var greetingSchema = mongoose.Schema({
greeting: String
});
var Greeting = mongoose.model('Greeting', greetingSchema);
app.get('/', function (req, res) {
Greeting.find({greeting: 'Hello World!'}, function (err, greeting){
res.send(greeting);
});
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
和一个像这样的简单集成测试:
/*test.js*/
const app = require('app.js');
const request = require('supertest');
it('sends "Hello World!" on the response body', (done) => {
request(app)
.get('/')
.expect(200, 'Hello World!', done);
});
});
通过在请求中使用实际的应用程序,我们正在连接到应用程序的数据库('mongodb://localhost/test')。那么如何使用 mockgoose 或任何其他解决方案来模拟 MongoDB 数据库并仍然像上面显示的那样运行集成测试?