15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Capybaraでテスト毎にsessionをリセットする

Posted at
  • Capybara.reset_sessions!でセッションが消えないので色々試してみた

環境

  • mac OSX10.9
  • safari 7.0.2
  • cucumber 1.3.10
  • capybara 2.1.0

やってみた

消えない

  • firefoxとかchromeだと消えるんだけど、safariだと消えない
Capybara.reset_sessions!
  • これもsafariだと消えない
Capybara.current_session.driver.browser.manage.delete_all_cookies

消えた・・・が

Capybara.module_eval do
  def delete_sessions!
    @session_pool.clear
  end
end
Capybara.delete_session!
  • 消えるには消える
  • が、シナリオを実行する度にブラウザが立ち上がる
  • 実行中のsessionに対する終了処理をしてないから
  • Linuxとかで実行してるとプロセス数の上限に達してテストが途中で失敗しだした・・・
  • http://d.hatena.ne.jp/akuwano/20120413/1334312849 とかが参考になります

sessionを消す前にブラウザを閉じる

  • sessionを消す前に、ブラウザを閉じるようにする
 Capybara.current_session.driver.browser.quit
  • features/support/hooks.rbに書くとこんな感じ
Before do
  Capybara.current_session.driver.browser.quit
  Capybara.delete_sessions!
end
  • さらに、safariでテスト回してて File exists - ${HOME}/Library/Safari/Extensions.bak とか出るようならBeforeに次の1行も入れとくとよさそう
FileUtils.rm_rf "#{ENV['HOME']}/Library/Safari/Extensions.bak"

結論

Capybara.module_eval do
  def delete_sessions!
    @session_pool.clear
  end
end

Before do
  Capybara.current_session.driver.browser.quit
  Capybara.delete_sessions!
  FileUtils.rm_rf "#{ENV['HOME']}/Library/Safari/Extensions.bak"
end

課題

  • 都度sessionを初期化するため、テストの実行が長くなるように感じる
  • 場合によってはtimeoutもおきそう・・・
15
11
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
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?