使用Rails,rspec和capybara,我正在尝试测试典型的ERB生成形式:
<form action="/pages/1" id="edit_page_1" method="post">
<input id="page_title" name="page[title]" type="text">
<input name="commit" type="submit" value="Update Page">
</form>
我运行两种功能规格,无论语言是什么,以及I18N特定的功能(用于国际化测试)。
问题是没有明确的方法来点击与capybara的提交按钮,除非我错过了明显的。我希望只需click('commit')
即可。
click_button('Update Page')
有效,但显然是特定于语言的,即使它们呈现相同的表单模板,也无法与新模板和编辑模板一起使用。答案 0 :(得分:16)
最后一个宏是我需要的答案,因为显然水豚没有任何原生。
# spec/support/form_helpers.rb
module FormHelpers
def submit_form
find('input[name="commit"]').click
end
end
这包含在spec_helper.rb
中RSpec.configure do |config|
config.include FormHelpers, :type => :feature
...etc...
我使用:type => :feature
因此它只包含在集成测试中。
在集成测试中,您可以像这样使用它:
scenario 'pages can be created' do
visit new_page_path
fill_in 'page_title', with: 'A Tale of Two Cities'
submit_form # Clicks the commit button regardless of id or text
expect(page).to have_content 'The page was created'
...etc..
end
当然submit_form
也可以在within
块内和:js => true
内使用。
答案 1 :(得分:10)
我通常会这样做:
within 'form#edit_page_1' do
find('input[name="page[title]"]').set "Some Value"
find('input[name="commit"]').click
end
它与html绑定,但与其语义属性相关,所以我觉得它很好。 实际上我从不使用神奇的发现者。
顺便说一下,我不明白你的评论:(a user would never know/care about accessing an element that way)
。
集成规格适合您,它可以模仿用户,但只需提供正确的指示。
答案 2 :(得分:1)
尝试使用:
find('input[name="commit"]').click
有帮助