我有一个看起来像这样的规范:
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/