我正试图让语法恰到好处。我想我很接近,但我正在尝试进行测试,以表明我的管理员可以摧毁用户。我现在得到的错误是:
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'
任何人都知道正确的语法是什么或者我搞砸了什么?
答案 0 :(得分:0)
第一个问题是您可能不希望能够删除管理员。您也不想删除自己。我建议添加一个管理员?用于测试用户是否为管理员的布尔方法,以便它不显示管理员的删除选项。你认为这样的东西会起作用:
<% 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?