在节点集成testing后清理mongodb

我有一个与mongodb后端节点写api。

我正在使用supertest自动testingapi。 当然这会导致数据库发生很多变化,我希望得到一些关于pipe理这个选项的信息。 目标是每个testing对数据库没有永久的影响。 testing完成后,数据库看起来应该和testing运行之前一模一样。

在我的情况下,我不希望数据库在testing之间被丢弃或完全清空。 我需要随时在数据库中维护一些真实的数据。 我只是想通过testing本身的变化被恢复。

在关系数据库中,我会在每个unit testing周围进行事务处理,并在testing完成(合格或失败)后将其回滚。 据我所知,这不是mongo的select。

我考虑过的一些选项:

假数据库

我听说内存数据库像fongo (这是一个Java的东西)和tingodb 。 我没有使用过这些解决scheme,但是这种解决scheme的问题总是需要与实际产品保持一致,才能将其作为一个可行的select。 只要我使用了假的不支​​持的mongofunction,我将有一个unit testing的问题。

手动清理

总是有一个例程,可以findtesting中添加的所有数据(以某种方式标记)并将其删除。 在这里你必须小心更新和删除。 也可能有很多保养,确保清理程序准确清理的东西。

数据库复制

如果速度足够快,可能有一个基准testing数据库,并在每个testing工作之前复制它。 它必须是相当快,虽然。

那么人们通常如何处理呢?

我认为这是在没有transaction情况下进行testing的全新方式。

使用mongo> = 3.2,我们可以设置inMemory存储引擎,这对于这种场景来说是非常完美的。

  1. 用inMemory启动mongo
  2. 恢复数据库
  3. 创build一个testing工作副本
  4. 对工作副本进行testing
  5. 下降工作拷贝
  6. 如果更多的testingGOTO 3