gpt4 book ai didi

node.js - 在 Node 中进行集成测试后清理 mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:42:13 26 4
gpt4 key购买 nike

我有一个用 node 编写的带有 mongodb 后端的 api。

我正在使用 supertest自动测试 api。当然,这会导致对数据库进行大量更改,我希望获得一些关于管理它的选项的输入。目标是每个测试都不会对数据库产生永久影响。测试完成后,数据库看起来应该与测试运行前完全一样。

在我的例子中,我不希望数据库在测试之间被删除或完全清空。我需要始终在数据库中维护一些真实数据。我只想还原测试本身所做的更改。

对于关系数据库,我会围绕每个单元测试放置一个事务,并在测试完成(通过或失败)后将其回滚。据我所知,这不是 mongo 的选项。

我考虑过的一些选项:

假数据库

我听说过像 fongo 这样的内存数据库(这是 Java 的东西)和 tingodb .我没有使用过这些,但此类解决方案的问题始终是它需要与实际产品保持良好的对等性,以保持其作为一个可行的选择。一旦我使用了假冒产品不支持的 mongo 功能,我就会遇到单元测试问题。

手动清理

总是有一个选项,即只使用一个例程来查找测试添加的所有数据(以某种方式标记)并将其删除。您必须注意此处的更新和删除。此外,可能还需要进行大量维护工作,以确保清理例程能够准确清理所有内容。

数据库复制

如果它足够快,也许有一个基线测试数据库和 making a copy在每个测试可以工作之前。不过它必须非常快。

那么人们通常如何处理这个问题?

最佳答案

我认为这是一种无需transaction的全新测试方式。

恕我直言 - 使用 mongo >=3.2,我们可以设置 inMemory存储引擎,非常适合这种场景。

  1. 使用 inMemory 启动 mongo
  2. 恢复数据库
  3. 为测试创建工作副本
  4. 对工作副本进行测试
  5. 删除工作副本
  6. 如果有更多测试 GOTO 3

关于node.js - 在 Node 中进行集成测试后清理 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com