1

我有一个使用 Minitest::Spec 和 Capybara 的 Rails 3.2 项目。

我的视图包含多个表单,因此我可以编辑或删除记录。示例代码:

<%= simple_form_for @product do |f| %>  
  <fieldset>
  #all of my field code
    <div id="form-actions" class="span12 form-horizontal">
        <%= f.submit nil, :class => 'create-button', :id => 'update_product' %>
        <%= link_to 'Cancel', products_path, :class => 'btn' %>
     </div>
   </fieldset>    
<% end %>

  <% if !@product.new_record? %>
    <div id="form-actions" class="form-horizontal">
      <%= button_to "delete", @product, :confirm => "Are you sure?", :method=>:delete, :class=>'delete-button', :id => 'delete_product' %>
    </div>
<% end %> 

在我的测试中,如果我调用click_on "update_product"(更新按钮的 id),则调用第二种形式的删除操作而不是更新操作。

4

1 回答 1

0

f.submit您在as上使用了错误的选项

:html => {:id => 'update_product' }

你不能在这里分配 id。所以你可以看到输出实际上是转义的html。这些是纯文本,而不是真正的 html。

{:id=&gt;&quot;update_product&quot;}

我的建议:

删除提交表单中的选项。给它一个名字(值),比如说f.submit 'Update'。此外,您不必自己在表单中分配 id。

然后请水豚click_button 'Update'​​。他可以毫无问题地找到它。

添加

如果您希望 Capybara 通过 id 而不是文本单击,请#在其前面添加以读取为 click_button '#update-product'.

但是,我确实建议您为该按钮分配任何值(文本),并要求 Capybara 单击它。将按钮设置为nil或空白确实不是惯例,也不是很好。

于 2013-04-12T06:33:51.657 回答