【问题标题】:How to use capybara with multiple forms in the one view with Rails?如何在 Rails 的一个视图中使用具有多种形式的水豚?
【发布时间】:2013-04-12 06:13:24
【问题描述】:

我有一个使用 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),则调用第二种形式的删除操作而不是更新操作。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 capybara minitest


    【解决方案1】:

    你在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 或空白确实不是惯例,也不是很好。

    【讨论】:

    • 非常感谢您的帮助。通过使用f.submit 突出显示我的错误实现,我发现包含id 的正确方法就是使用, :id =&gt; "update_product"。然后它在 html 中正确显示为id="update_product" name="commit" type="submit" 。但是,当我运行更新测试时,它仍然执行删除方法。我不希望使用f.submit 'Update',因为该表单是可用于“添加产品”和“更新产品”的部分表单。
    • @Marklar,请在修改后更新您的代码。
    • 我已经更新了代码和原始问题,以更清楚地反映当前的问题。
    • 再次感谢您的帮助。我在 Capybara 文档中找不到任何地方声明使用# 作为 id 而不是文本,但我还是尝试了相同的结果Unable to find button "#update_product"。看到这不起作用,我尝试将按钮的 nil 替换为“更新产品”,但是单击它不会给出错误,而是再次调用 DELETE 操作而不是 UPDATE 操作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2022-08-17
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多