Ответ 1
Все это хорошие предложения, но если вы хотите подтвердить, что это кнопка и что она имеет правильное значение (для отображения), вы должны быть немного более подробными:
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 выбирает его автоматически. Поскольку это сопоставление RSpec (а не поиск Capybara), он будет работать как в спецификациях характеристик (Capybara), так и в представлении (RSpec без Capybara).
Использование спецификаций функций:
page.should have_submit_button("Save Me")
Просмотр использования спецификации (после вызова render
):
rendered.should have_submit_button("Save Me")
Обратите внимание, что если вы находитесь в спецификации запроса Capybara и хотите взаимодействовать с кнопкой отправки, это намного проще:
click_button "Save Me"
Нет гарантии, что на самом деле это кнопка отправки, но ваши спецификации функций должны просто проверять поведение и не беспокоиться об этом уровне детализации.