在rspec中运行单个规范与完整套件时,不同的ActiveRecord关联更新行为

时间:2013-01-14 21:04:20

标签: ruby-on-rails ruby rspec

我有一个看起来像这样的规范:

foo.members << bar
# test some aspect of bar which assumes its membership in foo
  • 当我单独运行规范时(无论是在指向文件的rspec的命令行,还是在检测到文件更改后运行整个文件或仅运行单个示例),它都会通过。
  • 当我运行整个测试套件时(整个测试套件,或者实际上只是调用整个事物,但在单个示例上使用:focus,这样它仍然是唯一一个运行的,就像在第一个子弹中一样点上面)它失败了。

这解决了它:

foo.members << bar
bar.reload # <-- the fix
# test some aspect of bar which assumes its membership in foo

因此,出于某种原因,在第一种情况下,bar的成员资格在内存中正确更新,而在第二种情况下则不是。为什么呢?

1 个答案:

答案 0 :(得分:1)

您可能希望隔离套件中的其他规格(可能有多个)干扰相关测试。我建议您一次性启动该文件和另一个文件的规范,继续这样做,直到找到使该规范失败的测试文件(这可以手动完成或通过shell脚本完成)。一旦你把另一个干扰这个的规范隔离开来,请告诉我们,然后我们可以从那里开始。

作为一般规则,并且您可能已经意识到,测试应该彼此独立,并且不应该相互干扰。例如,确保没有规范存在方法或留下在数据库中创建的东西。