我如何在我的node.js应用程序中模拟数据库,在本例中使用mongodb
作为博客 REST API 的后端?
当然,我可以将数据库设置为特定的testing
-database,但我仍然会保存数据,不仅测试我的代码,还会测试数据库,所以我实际上不是在进行单元测试,而是在进行集成测试。
那么一个人应该做什么呢?创建数据库包装器作为应用程序和数据库之间的中间层并在测试时替换 DAL?
// app.js
var express = require('express');
app = express(),
mongo = require('mongoskin'),
db = mongo.db('localhost:27017/test?auto_reconnect');
app.get('/posts/:slug', function(req, res){
db.collection('posts').findOne({slug: req.params.slug}, function (err, post) {
res.send(JSON.stringify(post), 200);
});
});
app.listen(3000);
// test.js
r = require('requestah')(3000);
describe("Does some testing", function() {
it("Fetches a blogpost by slug", function(done) {
r.get("/posts/aslug", function(res) {
expect(res.statusCode).to.equal(200);
expect(JSON.parse(res.body)["title"]).to.not.equal(null);
return done();
});
});
));
我认为如果不使用数据库软件进行测试,就无法正确测试与数据库相关的代码。这是因为您正在测试的代码不仅仅是 javascript,还有数据库查询字符串。即使在您的情况下,查询看起来很简单,您也不能永远依赖它。
因此,任何数据库模拟层都必须实现整个数据库(可能不包括磁盘存储)。到那时,您最终将使用数据库模拟器进行集成测试,即使您将其称为单元测试。另一个缺点是,与数据库相比,数据库模拟器最终可能会出现一组不同的错误,并且您最终可能必须为数据库模拟器和数据库编写代码(有点像 IE、Firefox、Chrome 等的情况)。 )。
因此,在我看来,正确测试代码的唯一方法是将其与真实数据库连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)