【发布时间】:2016-06-09 21:26:29
【问题描述】:
我有一个用 mongodb 后端编写的 api。
我正在使用 supertest 自动测试 api。当然,这会导致对数据库进行大量更改,我希望获得一些有关管理此选项的输入。目标是每个测试对数据库没有永久影响。测试完成后的数据库应该与测试运行前完全一样。
就我而言,我不希望在测试之间删除或完全清空数据库。我需要始终在数据库中维护一些真实数据。我只想还原测试本身的更改。
对于关系数据库,我会在每个单元测试周围放置一个事务,并在测试完成后将其回滚(通过或失败)。据我所知,这不是 mongo 的选项。
我考虑过的一些选项:
假数据库
我听说过内存数据库,例如 fongo(这是一种 Java 技术)和 tingodb。我没有使用过这些,但这种类型的解决方案的问题始终是它需要与实际产品保持良好的一致性,才能将自身保持为一个可行的选择。一旦我使用了伪造品不支持的 mongo 功能,我就会遇到单元测试问题。
手动清理
总是可以选择只使用一个例程来查找测试添加的所有数据(以某种方式标记)并将其删除。您必须小心此处的更新和删除。此外,还可能需要进行大量维护,以确保清理例程能够准确清理。
数据库复制
如果速度足够快,也许有一个基线测试数据库和making a copy,然后才能进行每个测试。不过它必须非常快。
那么人们通常是如何处理这个问题的呢?
【问题讨论】:
-
我认为通过代码手动删除是正确的方法,因为我看到在mocha这样的测试框架中,它有
after all钩子来做这种操作。
标签: node.js mongodb integration-testing database