今日もテストを書いてて Capybara に殺されそうになってる。
コントローラーのテストの章が終わったのでフィーチャテストに進んだのですが、しょっぱなから Capybara 内でおこなった Model#create が visit 先のビューに反映されない事例に遭遇して死にそうになった。
Capybara でもコントローラーもビューも全部 Rails.env == 'test'
なのにビューだけからっぽでなにが起こってるかさっぱりわからない。
泣きそうになりながら検索をすすめているとActiveRecord::Base.establish_connection
がどうのとかいう記事がでてきて、それでは解決しなかったんだけど connection で毎日 RSpec 内を検索するとデータベースクリーナー使うならこのモンキーパッチ当てなきゃ共有されなくていろいろとダメよという記述があった。
class ActiveRecord::Base mattr_accessor :shared_connection @@shared_connection = nil def self.connection @@shared_connection || retrieve_connection end end ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
データベースクリーナーはつかってなかったものの共有されてない症状っぽいのでためしにモンキーパッチングしたら無事に Capybara 内でのモデル追加がビューに反映された。
なんでこんな挙動になるのかさっぱりわからないしひっかかってる人もいないし、本当に一人で地獄に迷い込んだっぽくなってつらかった。
Ubuntu、MySQL 14.14、Capybara 2.2.2、Rails 4.0.4、Ruby 2.1.1 などの構成です。