我正在使用Ruby on Rails 3.2.2,cucumber-rails-1.3.0,rspec-rails-2.8.1和capybara-1.1.2。通过使用Capybara我想检查HTML form
是否正在提交正确的URL;也就是说,检查相关的action="<PATH>"
HTML“标记”/“属性”是否符合我的预期。
例如,在以下代码中,我想检查<PATH>
是/users
(完整的HTML是action="/users"
),其中Ruby on Rails路由是{{1} }:
new_user_path
目前,为了检查页面上是否存在表单,我使用以下代码:
<form method="post" id="css_form_id" action="/users">
...
</form>
是否可以检查Then /^I should see the form$/ do
page.should have_selector('form#css_form_id', :visible => true)
end
是否提交了正确的网址?如果是这样,我该怎么做?你有什么建议?
答案 0 :(得分:2)
我认为你缺少行为驱动发展的基本概念。您真的关心表单的调用方式或发送数据的位置吗?不是在您谈论应用程序的高级行为时。您应该测试应用程序正在执行表单提交时应该执行的操作。您应该测试在提交表单时,结果是预期的结果,而不是检查它发布到哪个路径。看起来您正在使用此表单创建新用户,因此我将检查是否已使用您提交的参数创建了新用户:
When I create the following user:
| Name | Some Person |
| Email | person@email.com |
Then I should have the following user:
| Name | Some Person |
| Email | person@email.com |
然后,您的断言步骤将检查用户是否在步骤
之间保持不变Then /^I should have the following user:$/ do |user_table|
expected_user = user_table.rows_hash
user = User.find_by_email(expected_user['Email'])
user.name.should == expected_user['Name']
end
不测试你的观点的另一个原因是因为它使你的测试太脆弱了。如果您更改表单的类或ID,即使行为没有发生任何变化,您的测试也会中断。