送信ボタンの存在についてrspecでテストしたいのですが。カピバラも使っています。
私が試してみました:
should have_tag("input","Submit button")
そして
should have_content("Submit, button")
ただし、例外が発生するか、誤検知が発生します。
これらはすべて良い提案ですが、それがボタンであり、(表示用に)正しい値を持っていることを確認したい場合は、もう少し詳しく説明する必要があります。
page.should have_selector("input[type=submit][value='Press Me']")
私はこれを行う既存のマッチャーを知りません。これが私が書いたカスタムRSpec2マッチャーです:
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
actual.should have_selector("input[type=submit][value='#{value}']")
end
end
これがRSpec3バージョンです(提供:@zwippie):
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
expect(actual).to have_selector("input[type=submit][value='#{value}']")
end
end
他のカスタムマッチャーと一緒にspec/support/matchers/request_matchers.rb
に保管します。 RSpecはそれを自動的に取得します。これは(Capybara Finderではなく)RSpecマッチャーであるため、機能仕様(Capybara)とビュー仕様(CapybaraなしのRSpec)の両方で機能します。
機能仕様の使用法:
page.should have_submit_button("Save Me")
仕様の使用状況を表示する(render
を呼び出した後):
rendered.should have_submit_button("Save Me")
Capybaraリクエスト仕様を使用していて、送信ボタンを操作したい場合は、はるかに簡単であることに注意してください。
click_button "Save Me"
それが実際に送信ボタンであるという保証はありませんが、機能の仕様は動作をテストするだけであり、その詳細レベルについて心配する必要はありません。
組み込みのマッチャーがあります has_button? 。
RSpecを使用すると、次のようなアサーションを持つことができます
page.should have_button('Submit button')
または新しいRSpec3構文で:
expect(page).to have_button('Submit button')
私は1つ持っています(キュウリで使用されます):
Then /^I should see "([^"]*)" button/ do |name|
should have_button name
end
否定的な使用:have_no_button
hTMLマークアップが次のようなものである場合:
<input type="submit"></input>
次に、カピバラで次のことを行うことができます。
page.should have_selector('input[type=submit]')
これを試してください
it { should have_xpath("//input[@value='Sign up']") }
私は次のようなものを持っています:
page.find("#submitButton").visible?