个别规格在单独运行时通过,但在运行所有规格时失败

我的foo_controller_spec.rb中有30个规格,当我使用spec运行整个文件时,我得到4个失败,2个待定。 当我单独运行4个失败的规格时,其中3个仍然失败,但其中一个通过。 起初我认为这是一个数据库问题,在运行之间没有正确清理数据。 所以我安装了database_cleaner( http://github.com/bmabey/database_cleaner )并将此代码添加到我的spec_helper:

config.before(:suite) do DatabaseCleaner.strategy = :truncation DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.start Sham.reset login end config.after(:each) do DatabaseCleaner.clean end 

现在,当我运行我的规格时,我可以看到每个规格之间的表被截断,所以我知道它正在工作,但是当运行所有其他规格时规范仍然失败但是当单独运行时传递。 我在这里想念的是什么?

我有完全相同的问题,并且我的想法

我跟踪了这​​个问题(使用Textmate):在项目抽屉中选择文件(多个文件),然后转到“Bundles> Rspec>在所选文件/目录中运行示例”。

诀窍是找出哪个文件导致其他人干扰。

对我来说,它是在一个文件中更改I18n.locale,导致所有其他示例的区域设置被更改!

我失去了几个小时的坚果……

以防它帮助别人:我遇到了类似的问题并且发现了我的问题

  • 错误的Rspec.configures覆盖了所有测试
  • WebMocks在一个测试中启用,似乎级联到测试后跟踪,直到我包含在spec_helper中,因此默认情况下连接处于打开状态

    RSpec.configure do | config | config.before(:suite)做WebMock.allow_net_connect!

我今天遇到了类似的问题需要花费相当多的时间才能解决。

这失败了:

 module SomeModule describe SomeController do it 'does something' end end 

通过:

 describe SomeModule::SomeController do it 'does something' end 

这个问题必须涉及范围界定。