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

时间:2010-09-03 15:43:41

标签: ruby-on-rails testing rspec

我的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

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

4 个答案:

答案 0 :(得分:6)

我有完全相同的问题,忘记了

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

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

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

我为此疯狂了几个小时......

答案 1 :(得分:1)

以防它帮助其他人:我遇到了类似的问题,发现我有

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

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

答案 2 :(得分:0)

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

这失败了:

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

通过:

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

问题必须涉及范围界定。

答案 3 :(得分:0)

命令rspec --bisect--order rand:21237 --bisect(如果看到有关订购的错误)是调试的一个很好的第一步。添加--bisect=verbose以获得更多信息。

Link to RSpec GH issue

相关问题