【发布时间】:2021-08-28 17:27:16
【问题描述】:
我正在构建一系列对大量数据进行操作的 API。我一直在使用请求规范来测试它们。对于平均规格,我需要在数据库中拥有大约 20 到 30 条记录,这些记录从数据库关系的角度来看是相互连接的。大多数请求规范都需要更改这些记录的一小部分,因为我需要针对许多不同的可能场景测试 API。
由于我在大多数测试中都对数据进行了变异,因此我应该为每个规范单独重新创建所有这 20-30 条记录。就我而言,最好的做法是从每个测试的干净数据开始,不受以前规范的影响,这样每个测试都与其他测试完全隔离执行,并防止不需要的先前突变。
我的问题是执行时间受到很大影响(几秒钟),因为我总是为每个规范重新创建测试数据。我尝试了两种方法:
- 使用让!语句(不能简单地使用 let 语句,因为我总是需要在每次测试之前将数据存储在数据库中)
- 使用 before(:all),我将在其中定义所有测试的数据后,在每个测试完成后,仅重新创建在该规范中修改的实例变量。尽管这大大加快了时间,但我担心测试的正确性可能会受到影响,共享相同的状态而不是相互隔离。
在我的情况下,您认为最好的做法是什么?有没有办法同时获得测试的快速执行时间和状态完整性?还是我应该选择上面提出的一种方法?
【问题讨论】:
-
before_all通常最好避免使用,并且设置所有依赖项有一个解决测试排序问题和抖动测试的秘诀。
标签: ruby-on-rails rspec