在node.js中模拟数据库?

2023-12-30

我如何在我的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(使用前将#替换为@)

在node.js中模拟数据库? 的相关文章

随机推荐

  • 实体方面(春季)

    我在定义我的方面时遇到了一些问题 我有一堆实体 我想在其中分析 get methods 所以我编写了以下切入点和方法 Pointcut execution tld myproject data entities get public voi
  • 在运行时创建/修改枚举

    我正在创建一个程序 用户可以选择创建自己的自定义属性 这些属性最终将显示在PropertyGrid 现在我不想搞乱自定义编辑器 所以我只允许原始类型属性 string int double DateTime bool等 PropertyGr
  • 无闪烁文本框

    我的表单上有一个简单的 Winforms 多行文本框 每当我调整文本框的大小或移动文本框时 它的内容就会开始疯狂地闪烁 这看起来非常恶心 甚至可能导致某些用户癫痫发作 有没有办法操纵文本框的重绘过程来消除闪烁 我找到了一个工作解决方案 ht
  • 连接到 SQL Server 2008 的最大并发用户数

    连接到 SQL Server 2008 的最大并发用户数是否有限制 我猜测计算机资源决定了该限制 如果存在 但我也想知道是否存在理论上的限制 我尝试用谷歌搜索答案 但我找到的所有信息都是基于 SQL Server 的早期版本 如果有限制 它
  • 如何在 ASP.NET Core 中重写 HandleUnauthorizedRequest

    我正在将项目迁移到 asp net core 但我一直在迁移控制器的自定义授权属性 这是我的代码 public class CustomAuthorization AuthorizeAttribute public string Url g
  • 采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束

    我有一条如下所示的路线 理想情况下我希望它匹配 domain com layout 1 slug is the name of the page routes MapRoute Layout Route name layout id slu
  • C# 7.0 中的泛型函数和 ref 返回

    是否可以使用 C 7 0 中的 ref returns 功能定义一个通用函数 该函数可以对对象的两个实例中的字段进行比较和更新 我正在想象这样的事情 void UpdateIfChanged
  • avconv:根据图像的子集制作视频

    我正在尝试使用 avconv 将一堆 png 制作成视频 png 的编号如下filename
  • 如何检测难以捉摸的 64 位可移植性问题?

    我在我为 64 位端口准备的一些 C 代码中发现了与此类似的片段 int n size t pos npos initialization while pos find ch start npos advance start positio
  • KineticJS:右键单击触发单击

    我正在使用 Kineticjs 并且定义了一个像这样的矩形事件 this rect on click tap function foo 当我左键单击时会触发该事件 右键单击时也会触发该事件 如何避免右键单击触发此事件 我无法禁用页面中的右键
  • 如何获取本机 Oracle 函数(例如 NVL、ABS 等)的列表

    我尝试使用下面的命令 但没有按我的预期工作 select OBJECT NAME OWNER from SYS ALL OBJECTS where upper OBJECT TYPE upper FUNCTION order by OWNE
  • CSS 过滤器背后的数学原理是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设这些是我应用于图像的滤镜 我想知道这些过滤器背后的数学原理 filter contrast 1 3 brightness 0 8
  • 使用 Jsonata 匹配名称包含空格或特殊字符的 json 字段

    假设我有一些 JSON 例如 normal 1 has some spaces 2 3 我可以获得的值normal带有简单查询的字段 normal 但是我无法获取其他两个字段 我努力了 has some spaces has some sp
  • 对具有相同第一列值的 2D numpy 数组元素进行分组

    我有一个像这样的 2D numpy 数组 569 897 570 898 570 900 571 901 571 905 572 906 我想要要分组的第一列中具有相等值的元素按照以下方式一起 569 897 570 898 570 900
  • 将查询结果追加到表中

    当我尝试通过 API 插入查询作业 将查询结果附加到另一个表 时 我现在遇到了一些问题 查看文档 这似乎可以通过插入查询作业 设置目标表并将 writeDisposition 设置为 WRITE APPEND 来实现 如下所示 config
  • 是否有推荐的方法在使用 GWT 的 MVP 中使用观察者模式?

    我正在考虑使用 GWT 根据 MVP 模式实现用户界面 但对如何进行有疑问 这些是我的 一些 目标 演示者对 UI 技术一无所知 即没有使用 com google 中的任何内容 该视图对演示者一无所知 还不确定我是否希望它与模型无关 模型对
  • Collection.toArray() java.lang.ClassCastException

    import java util HashMap import java util Map public class Main public static void main String args Map
  • 如何用简单的代码修复“下标超出范围”错误

    我开始使用 VBA for Dummies 书学习如何编写 VBA 代码 我从书中复制并粘贴了这段代码 但它给了我一个错误 你能帮忙吗 Sub ShowValue Contents Worksheets Sheet1 Range A1 Va
  • 缩放标签文本与标签尺寸一致

    寻找一种调整大小的方法Labels文字随着尺寸的变化而变化Label 即标签尺寸是否应增加50 那么文本的大小也应该增加大约50 有很多文章可以调整文本以完全适合页面的大小Label 这不适合我想要的 我已经有了这个的工作版本 不知何故 我
  • 在node.js中模拟数据库?

    我如何在我的node js应用程序中模拟数据库 在本例中使用mongodb作为博客 REST API 的后端 当然 我可以将数据库设置为特定的testing database 但我仍然会保存数据 不仅测试我的代码 还会测试数据库 所以我实际