3

我有一个带有多个按钮的页面。例如 :

<% Zombie.each.do |zombie| %>
  <%= zombie.name %>
  <%= form_for(zombie) do |f| %>
    <div><%= f.hidden_field :craving, value: true %></div>
    <%= f.submit t('zombie.craving') %>
  <% end %>
<% end %>

我想测试

it "should increment the craving zombie count" do
  expect { click_button t('zombie.craving') }.to change(Zombie.where(craving: true), :count).by(1)
end

但如果我这样做,Capybara 会检测到与 Zombies 一样多的模棱两可的匹配...

我该怎么做才能避免这种情况?

4

1 回答 1

2

您应该为每个僵尸添加一个不同的类或 id 到您的表单(如“zombie_#{id}”)。Rails 有一个辅助方法可以为您执行此操作

<%= form_for(zombie, :html => { :id => dom_id(zombie) }) do |f| %>

然后在你的测试中你可以添加一个within

it "should increment the craving zombie count" do
  zombie = Zombie.where(craving: true).first

  within "#zombie_#{zombie.id}" do
    expect { click_button t('zombie.craving') }.to change(zombie, :count).by(1)
  end
end
于 2013-06-20T14:23:18.227 回答