是否有可能检查`form`是否正在提交正确的链接?

时间:2012-03-18 16:39:02

标签: ruby-on-rails ruby rspec cucumber capybara

我正在使用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 是否提交了正确的网址?如果是这样,我该怎么做?你有什么建议?

1 个答案:

答案 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,即使行为没有发生任何变化,您的测试也会中断。