2

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

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 的成员资格在内存中正确更新,而在第二种情况下则没有。为什么?

4

1 回答 1

1

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

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

于 2013-02-15T00:03:36.700 回答