在节点中进行集成测试后清理mongodb

时间:2016-06-09 21:26:30

标签: node.js mongodb integration-testing database

我在节点中写了一个带有mongodb后端的api。

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

在我的情况下,我不希望在测试之间删除或完全清空数据库。我需要始终在数据库中维护一些真实数据。我只是希望恢复测试本身的更改。

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

我考虑过的一些选项:

虚假数据库

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

手动清理

总是可以选择只有一个例程来查找测试添加的所有数据(以某种方式标记)并将其删除。你必须小心这里的更新和删除。此外,可能需要进行大量维护,以确保清理程序能够准确地清理内容。

数据库复制

如果它足够快,可能在每次测试之前都有基线测试数据库和making a copy。它必须非常快。

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

1 个答案:

答案 0 :(得分:1)

我认为这是一种在没有transaction的情况下进行测试的全新方法。

imho - 使用mongo> = 3.2,我们可以设置inMemory存储引擎,这对于这种情况非常适合。

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