Railsの技: Capybaraのテストで複数のセッションを扱う(翻訳)
アプリケーション内の機能は、複数のユーザーにまたがって動作することもあります。自動化システムテストを書くときにCapybaraのusing_session
ヘルパーを使うと、複数ユーザーの間の行き来を簡単にシミュレートできます。
ユーザーごとにログインやログアウトを繰り返したり、アプリに対して別のユーザーが変更を加えているように見せかけなくても、同一のCapybaraテスト内で複数のセッションを利用できます。
using_session
ヘルパーは通知機能やチャット機能などのテストにも便利ですし、ワークフローでタスクを進めるために複数のユーザーが操作を行わなければならない場合のテストにも有用です。
利用法
Capybaraでセッションを制御する方法はいくつかあります。
以下のようにセッションを手動で設定することも一応可能です。
Capybara.session_name = "Test session #1"
しかし私はusing_session
ヘルパーにブロックを渡す方法が好みです。これによってブロック内のコードを独立したセッション内で実行し、ブロックが終了すると元のセッションに復帰します。
以下は、基本的なタスク管理システムのテストの例です。ユーザーはこのシステムで、完了すべきタスクを別のユーザーに割り当てることができます。
describe "Task Assignment", type: :system do
it "allows users to assign tasks to other users" do
login as: users(:kelly)
visit "/tasks"
click_on "Review deliverable"
click_button "Assign to..."
select "Sam", from: "Assignee"
click_button "Save"
expect(page).to have_content("Status: Pending")
expect(page).to have_content("Assigned: Sam")
using_session("Sam") do
login as: users(:sam)
visit "/tasks/me"
expect(page).to have_content("Review deliverable")
click_on "Review deliverable"
click_on "Mark complete"
end
refresh
expect(page).to have_content("Status: Completed")
end
end
参考資料
- Capybaraドキュメント: Using Multiple Sessions
概要
原著者の許諾を得て翻訳・公開いたします。