web-dev-qa-db-ja.com

capybaraを使用してフォームフィールドが正しく入力されていることを確認するにはどうすればよいですか?

問題なくカピバラで入力できる適切なラベルのフィールドがあります:

fill_in 'Your name', with: 'John'

記入する前に値を確認したいのですが、わかりません。

fill_inの後に次の行を追加した場合:

find_field('Your name').should have_content('John')

このテストは失敗しますが、ページを保存することで確認したとおり、直前の塗りつぶしは機能していました。

私は何が欠けていますか?

140

xpath queryを使用して、特定の値(例: 'John')を持つinput要素があるかどうかを確認できます。

expect(page).to have_xpath("//input[@value='John']")

詳細については、 http://www.w3schools.com/xpath/xpath_syntax.asp を参照してください。

おそらくもっときれいな方法:

expect(find_field('Your name').value).to eq 'John'

編集:最近はおそらくhave_selectorを使用します

expect(page).to have_selector("input[value='John']")

ページオブジェクトパターンを使用している場合(する必要があります!)

class MyPage < SitePrism::Page
  element :my_field, "input#my_id"

  def has_secret_value?(value)
    my_field.value == value
  end
end

my_page = MyPage.new

expect(my_page).to have_secret_value "foo"
177
DVG

別のきれいな解決策は次のとおりです。

page.should have_field('Your name', with: 'John')

または

expect(page).to have_field('Your name', with: 'John')

それぞれ。

reference も参照してください。

:無効な入力の場合、オプションdisabled: trueを追加する必要があります。

288
fqxp

プレースホルダーをテストする場合は、次を使用します。

page.should have_field("some_field_name", placeholder: "Some Placeholder")

または:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")

ユーザーが入力した値をテストする場合:

page.should have_field("some_field_name", with: "Some Entered Value")
2
Jim Stewart

私は少し違うことをする方法を疑問に思っていました:フィールドにsome値があるかどうかをテストしたかった( Capybaraの能力を利用しながら一致するまでマッチャーを再テストします )。これを行うために「フィルターブロック」を使用することが可能であることがわかります。

expect(page).to have_field("field_name") { |field|
  field.value.present?
}
0
jonleighton