FactoryGirl 在将 Rails 升级到 4.2.3+ 后导致 NoMethodError

FactoryGirl causing NoMethodError after upgrading Rails to 4.2.3+

我刚刚将我的应用程序从 Rails 4.2.0 升级到 4.2.5,突然 all 我的测试(嗯,307 项中的 292 项)失败并显示如下消息:

 Failure/Error: let(:org)     { create :organisation }
 NoMethodError:
   undefined method `[]=' for nil:NilClass
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/test_after_commit-0.4.0/lib/test_after_commit.rb:57:in `sync_with_transaction_state'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activerecord-4.2.5/lib/active_record/persistence.rb:86:in `new_record?'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:432:in `block in make_lambda'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:227:in `call'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:227:in `block (2 levels) in halting_and_conditional'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:227:in `each'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:227:in `all?'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:227:in `block in halting_and_conditional'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:506:in `call'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:506:in `block in call'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:506:in `each'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:506:in `call'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:778:in `_run_initialize_callbacks'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activerecord-4.2.5/lib/active_record/core.rb:284:in `initialize'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activerecord-4.2.5/lib/active_record/inheritance.rb:61:in `new'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activerecord-4.2.5/lib/active_record/inheritance.rb:61:in `new'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator/new_constructor.rb:9:in `new'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:14:in `send'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:10:in `method_missing'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator/invocation_tracker.rb:11:in `method_missing'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:14:in `send'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:10:in `method_missing'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/configuration.rb:15:in `block in initialize'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:48:in `instance_exec'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:48:in `build_class_instance'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:13:in `object'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:12:in `object'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in `result'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:42:in `run'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:23:in `block in run'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/activesupport-4.2.5/lib/active_support/notifications.rb:166:in `instrument'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:22:in `run'
 # /home/patrick/.rvm/gems/ruby-2.1.4@engagement-hub-rails/gems/factory_girl-4.5.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
 # ./spec/controllers/api/v1/channels_controller_spec.rb:11:in `block (3 levels) in <top (required)>'
 # ./spec/controllers/api/v1/channels_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
 # ./spec/controllers/api/v1/channels_controller_spec.rb:22:in `block (3 levels) in <top (required)>'

如您所见,我使用的是 Ruby 2.1.4、Rails 4.2.5、FactoryGirl 4.5.0 和 RSpec 3.3.0。我一直在尝试这些版本——Ruby 2.2.2 没有帮助,FactoryGirl 和 RSpec 已经是最新的;错误发生在 Rails >= 4.2.3.

Rails 版本(及其使用的 gem)是我对我的存储库所做的 唯一 更改,在我这样做之前一切都运行良好。有谁知道为什么会这样?

我猜这与 this change to the test_after_commit gem 有关。尝试将 test_after_commit 更新到最新版本 (0.4.2)。