2013-06-20 5 views
2

У меня есть страница с несколькими кнопками. Например: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 

Но если я сделаю это, Капибара обнаружить столько неоднозначное матч, как есть зомби ...

Как я могу сделать, чтобы обойти это?

+0

Использование зомби в StackOverflow вопрос. Потрясающие. :-) – Johannes

ответ

1

Вы должны добавить класс или идентификатор к вашей форме, которая отличается для каждого зомби (например, «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 
+0

OK спасибо! Ты знаешь, почему Капибара стала такой хитроумной? –

+0

Ничего страшного ответа не могу ответить ... :) – jokklan

+0

Спасибо, в любом случае, я перетаскивал эту проблему в течение нескольких дней ... –