1. ホーム
  2. ruby-on-rails

[解決済み] Rspec/Capybaraのfill_inはどのように機能するのですか?

2022-02-18 14:26:59

質問

Michael HartlのRuby on Rails Tutorialに従っています。rspec/capybaraを使用する際、fill_inメソッドで混乱しています。私は次のようなビューコードを持っています。

 <%= f.label :name %>   
 <%= f.text_field :name %>

これは私のテストコードです。

 fill_in "Name", with: "Example User"

fill_inが入力フィールドを見つけるには、labelとtext_fieldの両方が必要なようです。もし私が f.label を変更するか <%= f.text_field :name %> に変更する。 <%= f.text_field :another_name %> の場合、テストは私に ElementNotFound というエラーが発生します。どなたか、ここで fill_in がどのように機能するか説明していただけますか?入力フィールドとラベルの両方が fill_in メソッドを使用できますか?

どのように解決するのですか?

それは 記載内容 その fill_in フィールドを探す name , id またはラベルテキストを指定します。によると ActionView::Helpers::FormHelper のセクションでは、ご質問のビューコードは以下のようなhtmlコードに変換されるはずです。

# I assume that you made a form for a @user object
<label for="user_name">
  Name
</label>
<input id="user_name" name="user[name]" type="text" />

ご覧の通りです。 label は、quot;Name" テキストを生成します。 fill_in という表現があります。しかし idname のプロパティは input フィールドは微妙に異なるので、本来は id ベースのセレクタを使用して、同じ結果を得ることができます。

fill_in "user_name", with: 'Example User'

では、まとめます。 label フィールドは必須ではありませんが、html コードをよく観察し、適切なパラメータを選択して fill_in を表現することができます。