Rails:我可以测试button_to的存在吗?

时间:2016-08-27 15:27:45

标签: ruby-on-rails testing button-to

我的网站有几十个“link_to”实例。我决定将其中的大多数更改为“button_to”以获得更好的外观。用于检查这些链接是否存在的测试行不再适用。

assert_select "a", :href => user_path(@seminar.teacher), text: "Your Teacher Profile", count: 2

使用

测试无效
assert_select "button", etc...

有没有办法调整测试以找到button_to实例?从我最初的搜索开始,似乎没有。

我也在考虑简单地从测试中删除这些行,因为我在另一篇文章中读到,只是测试显示项的存在并不是一种非常有用的方法来使用rails测试。

提前感谢任何见解!

2 个答案:

答案 0 :(得分:1)

我会删除那些仅测试链接是否存在的测试。编写单击这些按钮的测试并测试单击按钮后发生的情况会更好。用户更关心点击按钮时发生的事情,而不是页面上是否存在按钮。

答案 1 :(得分:1)

这是使用Rails'来测试button_to存在的一种方法。默认测试框架MiniTest。 在此示例中,成员的显示页面上有一个按钮,用于将其成员身份状态更改为非活动状态:

<%= button_to 'Change status to Inactive', membership_path(@membership), method: :patch, 
    params: { 'membership[status]' => 'Inactive'} %>

如果您在网络浏览器中查看视图以查看HTML(在Chrome中,右键单击按钮元素,然后选择“检查”),您将看到button_to实际上是一个表单。因此,您可以测试form元素是否存在,其action属性等于特定的membership_path。

membership = Membership.first
assert_select 'form[action=?]', membership_path(membership.id)

如果您还要测试按钮的文本是否存在,请执行阻止

membership = Membership.first
assert_select 'form[action=?]', membership_path(membership.id) do
  assert_select 'input[value=?]', 'Change status to Inactive'
end