ruby-on-rails - capybara 模糊匹配 - 如何选择第一项

标签 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 会检测到与僵尸一样多的模糊匹配......

我该如何规避这个问题?

最佳答案

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

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

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

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

关于ruby-on-rails - capybara 模糊匹配 - 如何选择第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215931/

相关文章:

ruby-on-rails - Bundler 找不到 gem "nokogiri"的兼容版本

ruby-on-rails - 我应该如何使用 rspec 测试路由和 Controller ?

ruby - 如何使用 Capybara & Minitest 测试多步表单?

mysql - gem install mysql2 出错

ruby-on-rails - 如何在 PostgreSQL 数据库中存储类哈希对象?

ruby-on-rails - 使用延迟作业在后台处理方法

ruby-on-rails - 记录 API 调用的最佳方式,每分钟/每小时

ruby-on-rails - 由 Yard 和西类牙口音生成的文档

ruby-on-rails - Capybara 在/test 而不是/spec 中生成测试

capybara - Poltergeist 和 Capybara 可以单独使用吗?