Question

I'm trying to get the syntax just right. I think I'm close but I'm trying to make a test to show that my admin can destroy a user. The error I get right now is :

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

and I totally understand that. That means I get to the users index page and I see the delete button for a regular user and the admin. How do I exactly specify which user I want to click the delete button on so I can delete them in the test.

here is my users.yml file

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') %>

here is my admin_test.rb file

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

I think the problem is caused on the line

click_on 'delete'

anyone know what the right syntax is or what I'm messing up?

Was it helpful?

Solution

First issue is that you probably don't want to be able to delete an admin. You also don't want to delete yourself. I would suggest adding an admin? boolean method to test for whether a user is an admin or not so that it doesn't show the delete option for admins. Something like this in your view would work then:

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

Second is the issue when have two of the same element and get an ambiguous match. For testing a lot of times you only want to select one out of the many. You could just select the first one:

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

You can check out this answer for more info: How to click first link in list of items after upgrading to Capybara 2.0?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top