用于测试的内存 MongoDB?

2024-02-14

我正在使用 MongoDB 数据库为我的 NodeJS 应用程序编写一些集成和系统测试。我使用的测试框架是Mocha和Supertest。是否可以将 MongoDB 设置为内存数据库,我只能用它来测试,然后在测试完成后擦除我的所有集合和文档?


您可以使用以下方法来完成此操作mongodb 内存服务器 https://www.npmjs.com/package/mongodb-memory-server。该软件包将 mongod 二进制文件下载到您的主目录,并根据需要实例化一个新的内存支持的 MondoDB 实例。对于每个测试文件,您可以启动一个新服务器,这意味着您可以并行运行它们。


供读者使用jest https://jestjs.io原生 mongodb 驱动 https://www.npmjs.com/package/mongodb,你可能会发现这个类很有用:

const { MongoClient } = require('mongodb');
const { MongoMemoryServer } = require('mongodb-memory-server');

// Extend the default timeout so MongoDB binaries can download
jest.setTimeout(60000);

// List your collection names here
const COLLECTIONS = [];

class DBManager {
  constructor() {
    this.db = null;
    this.server = new MongoMemoryServer();
    this.connection = null;
  }

  async start() {
    const url = await this.server.getUri();
    this.connection = await MongoClient.connect(url, { useNewUrlParser: true });
    this.db = this.connection.db(await this.server.getDbName());
  }

  stop() {
    this.connection.close();
    return this.server.stop();
  }

  cleanup() {
    return Promise.all(COLLECTIONS.map(c => this.db.collection(c).remove({})));
  }
}

module.exports = DBManager;

然后在每个测试文件中您可以执行以下操作:

const dbman = new DBManager();

afterAll(() => dbman.stop());
beforeAll(() => dbman.start());
afterEach(() => dbman.cleanup());

我怀疑这种方法对于其他测试框架可能是类似的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于测试的内存 MongoDB? 的相关文章

随机推荐

  • awk 中比较连续行

    我想使用 awk 命令比较文件中的连续行 这是输入和输出的示例 输入文件 6 7 8 9 10 4 5 6 我想要的输出文件是这样的 6 7 8 9 10 14 15 16 基本上我想比较当前行是否大于前一行 并继续打印前一行和当前行 一旦
  • 如何采取行动关闭 NSPopover?

    您好 我在我的一个应用程序中实现了 NSPopover 但弹出窗口不会关闭 我猜一旦我单击其他内容 它应该关闭 但事实并非如此 我知道有一个关闭弹出窗口操作 但这只适用于不同的按钮 当我按下同一按钮时 如何才能看到弹出窗口已打开以及何时打开
  • 使用泛型从枚举中获取最大值

    如何使用泛型从枚举中获取最大 int 值 我已尝试以下操作 但它显示以下编译错误 无法将 T 隐式转换为 int int maxValue GetMaxValue
  • 如何在 2019.3 中删除我的 IntelliJ 许可证?

    我安装了 JetBrains IntelliJ 如何删除许可证设置 我可以在以下位置找到许可证详细信息Help gt Register 菜单 但这不允许我删除许可证设置或输入无效数据 例如不存在的许可证服务器 用例 我安装了一个许可证服务器
  • 是否可以在 Spring MVC REST 端点中验证 @RequestParam?

    在 Jersey 2 中可以这样做 GET PATH user email public IDto getUser NotNull Email PathParam email String validEmail return userMan
  • 如何将列表转换为队列来实现先进先出

    考虑 public List
  • 数组公式中当前行中的 COUNTA (Google 表格)

    我有一个具有固定数量的列和动态行的 Google 工作表 我喜欢使用 countA 来计算当前行中具有值 非空白 的字段 我找到了一个公式在这里 https productforums google com forum topic docs
  • Android权限保护级别18和50

    当我转储 Nexus 7 上所有应用程序的所有权限时 我 如预期 获得保护级别为 0 正常 1 危险 2 签名 的权限 3 SIGNATURE OR SYSTEM 以下没有任何记录 但也有很多权限的保护级别设置为 18 有些权限设置为 50
  • 相机在 android 2.2 上不工作

    在Android SDK和AVD Manager中 我创建了一个新的android虚拟设备 如下所示 姓名 myavd 目标 Android 2 2 API 级别 8 SD 卡 50MiB 内置 默认 HVGA 硬件 抽象 LCD 密度 1
  • LdapConnection 与 PrimaryContext

    我有以下两种使用 LDAP 和 LDAPS 验证用户身份的实现 我想知道哪个更好 更正确 郑重声明 这两种方法都适用于 SSL 和非 SSL 连接 我也很好奇 因为当在 Wireshark 上观看时Non SSL PrincipalCont
  • php中usort()函数如何工作

    我查看了 php 文档 在线教程 但没有看到 usort 是如何实际工作的 我在下面有一个我正在玩的例子 data array array msg gt some text month gt 11 level gt 10 array msg
  • 使用传输客户端的安全弹性连接

    需要使用 java 代码中的传输客户端连接到具有 https 身份验证的安全弹性搜索 我有用户 ID 和密码来连接安全弹性 我使用的是elasticsearch 7 10 0 try Settings settings Settings b
  • 何时在休眠中使用 Criteria.ALIAS_TO_ENTITY_MAP?

    我是冬眠新手 我已阅读以下行 Criteria ALIAS TO ENTITY MAP 请帮助我何时使用Criteria ALIAS TO ENTITY MAP Thanks 这些通常与 hibernate 中的结果集转换器一起使用 阅读A
  • 如何在网络表单中加载页面之前填充下拉列表?

    我的控件 System Web UI UserControl 中有以下 Page Load 方法 protected void Page Load object sender EventArgs e DropDownList ShowAss
  • 无法在unity java插件上使用google play服务

    我有一个用 Java 编写的 Unity 插件 在这个插件中我需要获取新的 Google广告ID http googledevelopers blogspot co il 2013 10 google play services 40 ht
  • 如何将事件侦听器添加到 Highcharts 对象*之后*我创建它

    我正在尝试在创建 highcharts 对象后向其添加事件侦听器 我可以在申报时添加一项 当我尝试使用 Chrome 控制台来确定在何处附加侦听器后声明时 我做不到 如果您想在创建图表后添加事件侦听器 文档提供了一些关于扩展高图表 http
  • 尝试打印链接名称时出现 StaleElementReferenceException

    我正在尝试打印谷歌搜索中显示的前 5 页链接 但是得到 StateElementReferenceException 不确定哪一个出了问题 public class GoogleCoInTest static WebDriver drive
  • 如何阻止 Python 在 Microsoft Windows 中执行时立即关闭

    我刚刚上大学 我们将使用 python 我们确实什么也没做 所以我下载了程序并执行了一些打印命令 仅此而已 当我运行我的 py 文件时 print命令 出现后立即关闭 我理解它为什么这样做 它给出了输出 所以它完成了它需要做的事情 但我也理
  • 如何在空手道加特林中每秒加载更多请求

    我正在尝试重用空手道脚本并使用加特林执行负载测试 定义的场景是每秒加载 50 个用户 持续 10 秒 对 500 个用户进行负载测试 但是 gatting 报告中每秒的请求数不超过 20 个请求 如果我做错了什么 请告诉我 执行空手道脚本的
  • 用于测试的内存 MongoDB?

    我正在使用 MongoDB 数据库为我的 NodeJS 应用程序编写一些集成和系统测试 我使用的测试框架是Mocha和Supertest 是否可以将 MongoDB 设置为内存数据库 我只能用它来测试 然后在测试完成后擦除我的所有集合和文档