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)を呼び出すと、更新アクションではなく、2番目のフォームの削除アクションが呼び出されます。

4

1 に答える 1

0

f.submitasで間違ったオプションを使用します

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

ここで ID を割り当てることはできません。したがって、出力が実際にエスケープされた html であることがわかります。これらは純粋なテキストであり、実際の html ではありません。

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

私のおすすめ:

送信フォームのオプションを削除してください。それに名前(値)を付けてf.submit 'Update'ください。また、フォーム内で自分で ID を割り当てる必要はありません。

次に、カピバラに を依頼しclick_button 'Update'ます。彼は問題なくそれを見つけることができます。

追加

Capybara にテキストではなく id でクリックさせたい場合は、その#前に を追加して as と読みます click_button '#update-product'

ただし、そのボタンに任意の値(テキスト)を割り当てて、カピバラにクリックしてもらうことをお勧めします。ボタンをnilまたは空白に設定することは、実際には慣例ではなく、良くありません。

于 2013-04-12T06:33:51.657 に答える