我在节点中写了一个带有mongodb后端的api。
我正在使用supertest来自动测试api。当然,这会导致对数据库进行大量更改,我希望获得有关管理此选项的选项的一些输入。目标是每个测试对数据库没有永久性影响。测试完成后,数据库看起来应该与测试运行之前完全相同。
在我的情况下,我不希望在测试之间删除或完全清空数据库。我需要始终在数据库中维护一些真实数据。我只是希望恢复测试本身的更改。
使用关系数据库,我会在每个单元测试周围放置一个事务,并在测试完成后将其回滚(通过或失败)。据我所知,这不是mongo的选择。
我考虑过的一些选项:
我听说过像fongo这样的内存数据库(这是Java的东西)和tingodb。我没有使用这些,但这种解决方案的问题始终是它需要与实际产品保持良好的平衡,以保持自身作为可行的选择。只要我使用mongo功能,假冒不支持我就会遇到单元测试问题。
总是可以选择只有一个例程来查找测试添加的所有数据(以某种方式标记)并将其删除。你必须小心这里的更新和删除。此外,可能需要进行大量维护,以确保清理程序能够准确地清理内容。
如果它足够快,可能在每次测试之前都有基线测试数据库和making a copy。它必须非常快。
那么人们通常如何处理这个问题?
答案 0 :(得分:1)
我认为这是一种在没有transaction
的情况下进行测试的全新方法。
imho - 使用mongo> = 3.2,我们可以设置inMemory存储引擎,这对于这种情况非常适合。
GOTO 3