Capybara でテストの対象を特定のセレクタ範囲だけに絞りたいとき

結論

within を用います。

例えば、以下のような HTML があったとします。

(省略)
<div data-testid="target_area">
  <p>foobar</p>
  <p>fugafuga</p>
</div>

<div data-testid="not_target_area">
  <p>barbar</p>
  <p>hogehoge</p>
</div>

このとき <div data-testid="target_area"></div> の範囲内だけをテストの対象にしたい場合には次のように書きます。

within find('[data-testid="target_area"]') do
  expect(page).to have_content "foobar"
  expect(page).not_to have_content "hogehoge"
end

上記のように書く際に expect の引数は page で大丈夫です*1

*1:「指定範囲内の」"page" になる

Powered by はてなブログ