Capybara Ambiguous match - 如何选择第一项

时间:2013-06-20 14:12:36

标签: ruby-on-rails capybara

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

<% 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会发现与僵尸一样多的模糊匹配...

我该如何规避这个?

1 个答案:

答案 0 :(得分:1)

您应该为表单添加一个类或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