在节点集成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存储引擎,这对于这种场景来说是非常完美的。
- 用inMemory启动mongo
- 恢复数据库
- 创build一个testing工作副本
- 对工作副本进行testing
- 下降工作拷贝
- 如果更多的testing
GOTO 3