😋

rspec within の使い方

2025/02/02に公開

within とは?

Capybara を使ったテストで特定の HTML 要素のスコープ内で操作やアサーション(プログラムのデバッグやテストのために、プログラムの実行時に条件を満たしているかどうかを検証する仕組み)を行うためのメソッドです。
within を使うと、指定したセレクタの範囲内だけで fill_in や click_button などの操作を行うことができます。

使い方

使い方は下記の通りです。

・フォームの特定の部分に限定して操作

test.rb
within("#login_form") do
  fill_in "Email", with: "user@example.com"
  fill_in "Password", with: "password"
  click_button "ログイン"
end

この場合、#login_form の内部にある Email や Password のフィールドだけが対象になります。

・within を使って特定の範囲のテキストを確認

test.rb
within(".flash-message") do
  expect(page).to have_content("ログイン成功")
end

このコードは、.flash-message クラス内に "ログイン成功" というテキストがあることを確認します。

within と within_fieldset の違い

Capybara には within_fieldset というメソッドもあり、これは <fieldset> 内の操作に特化しています。

test.rb
within_fieldset("ユーザー情報") do
  fill_in "名前", with: "田中 太郎"
end

この場合、"ユーザー情報" という <fieldset> 内にある 名前 フィールドに値を入力します。

まとめ

within についてまとめると下記になります。

・within は、指定した要素の範囲内で操作やアサーションを行う。
・within_fieldset は <fieldset> タグの中を対象にする。
・スコープを限定することで、テストが意図した要素に対して実行されるようにできる。

参考

https://www.rubydoc.info/gems/capybara/Capybara%2FSession:within

https://qiita.com/morrr/items/0e24251c049180218db4#スコープを切るwithin

Discussion