Rspec:事务夹具在升级到rails 4后不起作用

bob*_*low 11 activerecord rspec ruby-on-rails

我在spec_helper.rb中设置了以下行

config.use_transactional_fixtures = true
Run Code Online (Sandbox Code Playgroud)

这意味着每个测试都应该自行清理.一次测试所做的任何db更新都不应该用于下一次测试.

我的一个spec文件中有两个测试.

it 'should update the DB' do
  Setting.put('abcd', 'efgh')
end

it 'should not find the DB update' do
  Setting.get('abcd').should be_nil
end
Run Code Online (Sandbox Code Playgroud)

以上两个测试用于使用Rails 3.2.14

但升级到Rails 4后,第二次测试失败,出现以下错误,

------
expected: nil
got: "efgh"
-----
Run Code Online (Sandbox Code Playgroud)

由于这个问题,我在套件中有大约100个测试失败.

我可以为Rails 4升级找到的唯一相关文档是非常模糊的:"Rails 4.0已经弃用了ActiveRecord :: Fixtures而支持ActiveRecord :: FixtureSet."

我不确定这是否/如何相关.理想情况下,我希望有一个全局设置(config.use_transactional_fixtures = true),而不必更改测试的逻辑(或在(:each)/ after(:each)模块之前添加额外的模块,以使现有测试通过. 请帮忙!

mes*_*jah 0

正如一条评论所暗示的,这可能是 rspec-rails 的问题(https://github.com/rails/rails/issues/10376)。尝试升级到rspec-rails 2.13.1或更高版本:

bundle update --source rspec-rails