LoginSignup
7
7

More than 5 years have passed since last update.

poltergeistを使ったログインのテストが失敗するとき

Last updated at Posted at 2015-01-03

注意

  • 別にpoltergeistを使った場合に限った話ではない
  • 別にログインのテストに限った話ではない

概要

  • Capybara、turnipを使ってdeviseのログインテストを書いた
  • なぜかconfig.default_driverを:poltergeistに変えたら通らなくなった
  • テストユーザのデータは、FactoryGirlでテストごとに作成していた

原因と解決策

以下のような理解

  • rspecのプロセスとテスト用ブラウザプロセスは別
  • poltergeistを使わずcapybaraでテストしていたときは、実際のブラウザプロセスが動いていなかった(たぶん)からテストが通っていた
  • rspecプロセス側のトランザクション内で作成したテストデータが、ブラウザプロセス側には反映されていなかった(トランザクションなので)
  • rspecが管理するトランザクションをやめて、テストごとにテストデータ作成+削除をする必要がある

以下、実際の解決方法

  • database_cleanerというgemを導入

  • rspec側のfixturesのトランザクションを無効化

RSpec.configure do |config|
  ...
  config.use_transactional_fixtures = false
end
  • テストデータの削除タイミングを設定(jsを使う場合のみtruncationにするなど、この通りでなくてもいい)
RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

まとめ

  • いまさら感あるっぽいけど、rails初心者は確実にハマる
    • そもそも、テストデータが毎回勝手に消えてるな−、程度にしか考えてなかった
      • よく思い返せば、ログには「ROLLBACK」とかいう文字が出てました
  • rails奥が深い
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7