web-dev-qa-db-ja.com

カピバラに送信ボタンが存在するかどうかをテストするにはどうすればよいですか?

送信ボタンの存在についてrspecでテストしたいのですが。カピバラも使っています。

私が試してみました:

should have_tag("input","Submit button")

そして

should have_content("Submit, button")

ただし、例外が発生するか、誤検知が発生します。

17
sonnyhe2002

これらはすべて良い提案ですが、それがボタンであり、(表示用に)正しい値を持っていることを確認したい場合は、もう少し詳しく説明する必要があります。

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"

それが実際に送信ボタンであるという保証はありませんが、機能の仕様は動作をテストするだけであり、その詳細レベルについて心配する必要はありません。

36
Jim Stewart

組み込みのマッチャーがあります has_button?

RSpecを使用すると、次のようなアサーションを持つことができます

page.should have_button('Submit button')

または新しいRSpec3構文で:

expect(page).to have_button('Submit button')
16
koffeinfrei

私は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]')
1
DrewB

これを試してください

it { should have_xpath("//input[@value='Sign up']") }
0
mix-fGt

私は次のようなものを持っています:

page.find("#submitButton").visible?
0
Mitch Dempsey