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

标签 ruby-on-rails ruby rspec

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

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

这修复了它:

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

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

最佳答案

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

作为一般规则,您可能已经知道,测试应该相互独立,并且永远不应相互干扰。例如,请确保没有规范在删除方法或留下在数据库中创建的内容。

关于ruby-on-rails - 在 rspec 中运行单个规范与完整套件时不同的 ActiveRecord 关联更新行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14326616/

相关文章:

ruby-on-rails - Rspec 的文档在哪里?

ruby-on-rails - cucumber 防止清除数据库

ruby-on-rails - 如何测试我的 Controller 是否在 Rails 3 上呈现了正确的布局?

ruby-on-rails - 如何指定与factory_bot的关联?

ruby-on-rails - rails : include related object in JSON output

ruby-on-rails - 避免 delayed_job 队列中的重复作业

ruby-on-rails - 福雷姆 gem : how to link a forum to other models

ruby - sinatra 和 tweetstream 不能一起工作

ruby 什么时候出现特征类

multithreading - 如何使用 Rspec stub 线程?