【问题标题】:destroy test in rails with minitest capybara用 minitest capybara 破坏 Rails 中的测试
【发布时间】:2013-12-20 01:01:30
【问题描述】:

我试图让语法恰到好处。我想我已经接近了,但我正在尝试进行测试以表明我的管理员可以破坏用户。我现在得到的错误是:

Ambiguous match, found 2 elements matching link or button "delete

我完全理解这一点。这意味着我进入了用户索引页面,我看到了普通用户和管理员的删除按钮。如何准确指定要单击删除按钮的用户,以便在测试中删除它们。

这是我的 users.yml 文件

user:
  name: user
  email: user@examle.com
  admin: false
  password_digest: <%= BCrypt::Password.create('password') %>

admin:
  name: admin
  email: admin@admin.com
  admin: true
  password_digest: <%= BCrypt::Password.create('password') %>

这是我的 admin_test.rb 文件

require "test_helper"

feature "as a blog owner I want a working user delete so I can remove trolls" do
  scenario 'admin can delete profile' do
    visit new_session_path
    fill_in 'Email', with: users(:admin).email
    fill_in 'password', with: 'password'
    click_on 'Log In'
    visit users_path(:admin)
    click_on 'delete'
    click_on 'OK'
    page.must_have_content "User deleted"
  end
end

我认为问题是在线引起的

click_on 'delete'

有人知道正确的语法是什么或我搞砸了什么吗?

【问题讨论】:

标签: ruby-on-rails capybara minitest


【解决方案1】:

第一个问题是您可能不希望能够删除管理员。您也不想删除自己。我会建议添加一个管理员?用于测试用户是否为管理员的布尔方法,因此它不会显示管理员的删除选项。你认为这样的事情会起作用:

<% if current_user.admin? && !current_user?(user) %>
    | <%= link_to "delete", user, method: :delete,
                                  data: { confirm: "You sure?" } %>
<% end %>

其次是当有两个相同的元素并获得模棱两可的匹配时的问题。对于多次测试,您只想从众多中选择一个。你可以只选择第一个:

first('.item').click_link('Agree')

您可以查看此答案以获取更多信息:How to click first link in list of items after upgrading to Capybara 2.0?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多