当前位置: 首页 > 面试题库 >

在node.js中模拟数据库?

闻人望
2023-03-14
问题内容

我如何在我的node.js应用程序中模拟数据库,在本例mongodb中将其用作博客REST API的后端?

当然,我可以将数据库设置为特定的testing数据库,但是我仍然会保存数据,不仅要测试我的代码,还要测试数据库,所以我实际上不是在进行单元测试,而是在进行集成测试。
那该怎么办?创建数据库包装程序作为应用程序和数据库之间的中间层,并在测试时替换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等情况)。
)。

因此,我认为,正确测试代码的唯一方法是将其与真实数据库接口。



 类似资料:
  • 问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并希望能够模拟我的数据库(可能使用Sinon)。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有许多吸气剂的简单CRUD。 关于如何实现此目标的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望

  • 在做任何其他事情之前,我想澄清,我问的是而不是。 背景: 我有一个应用程序,同时使用Firestore和Firebase实时数据库。我发现了一种单元测试Firestore的方法,通过在dart pub使用cloud firestore模拟包来模拟它。到目前为止,我一直在试图搜索是否有任何Firebase实时数据库的等价物,我没有看到任何。这里和谷歌都有.. 所以我的问题是,如何创建一个需要模拟Fi

  • 问题内容: 我正在开发一个Web应用程序,该应用程序显然在iOS设备中存在问题。问题是我不拥有iOS设备,而是在Linux Ubuntu中进行开发。我正在寻找一种在Linux(尤其是浏览器)中仿真/模拟此OS的方法,但是还没有找到任何东西。 到目前为止,我发现的是iOS SDK的Simulator,但这是针对Mac的。还有一些Windows模拟器。有人做过吗? 问题答案: 我能想到的唯一解决方案是

  • 问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并且希望能够使用Sinon来模拟我的数据库。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有很多吸气剂的简单CRUD。 关于如何做到这一点的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望的输

  • 问题内容: 我正在将selenium-webdriver用于nodejs。 如何使用此驱动程序模拟右键单击?我在官方文档中找不到。 问题答案: 谢谢,糟糕。你帮我找到解决方案。 答案(在此处找到):

  • 由于一个人在单元测试和模拟之前没有经验,我使用Mockito学习了关于JUnit的初学者教程,并进行了一些实践。 现在,我需要对一些在MySQL数据库上执行基本数据库操作的类方法进行单元测试。我不想对数据库进行真正的更改。 在不访问真实数据库的情况下,是否存在验证类似方法的方法?还是我误解了单元测试和嘲笑的概念?