2017-11-23 2 views
1

"Admin으로 승격"을 클릭하여 관리자에게 다른 사용자를 관리자로 승격시킬 수있는 방법에 대해 테스트하는 데 문제가 있습니다. 내 컨트롤러에 있으며, 기능 테스트를 쓰고 있습니다. 레일 5.1.4를 사용하고 있습니다. 카피 바라 :: ElementNotFound : 그것은 나에게 오류를 제공Capybara :: ElementNotFound : 표시된 링크를 찾을 수 없습니다.

describe "Promotion" do 
before do 
    login_as(User.create!(name: "lala", email: Faker::Internet.email, 
    password: "lalala", admin: true)) 
    visit users_path 
end 

context "to admin" do 
it "promotes user to admin" do 
    click_link("Promote to Admin", :match => :first) 
    expect(current_path).to eq user_promote_path 
end 
end 
end 

:

def promote 
    @user = User.find(params[:user_id]) 
    if @user.toggle!(:admin) 
    flash[:success] = "User is promoted to admin." 
    redirect_to root_path 
    else 
    flash[:notice] = "Can't promote." 
    redirect_to root_path 
    end 
    end 

테스트입니다 볼 수 링크를 찾을 내가이기 때문에 생각 "관리자로 승격"할 수 없습니다 올바른 페이지에 액세스하지 못하고 관리자로 로그인하려고하면 작동하지 않을 수 있습니다. 모든 제안은 매우 감사하겠습니다!

답변

0

테스트에 실패 할 가능성이 가장 큰 이유는 사용자가 로그인 한 사용자 외에 다른 사용자를 만들지 않은 것입니다. 그렇지 않은 경우에는 "관리자로 승격"링크를 표시 할 사용자가 없습니다. 언제든지 페이지를 저장하거나 puts page.html을 수행하여 실제로 페이지에 있다고 생각하는 것이 있는지 확인할 수 있습니다.

테스트의 두 번째 문제점은 eq 정규식을 current_path와 함께 사용하면 안된다는 것입니다. 안정적인 테스트를 원하는 카피 바라 제공 경로 일치자를 사용해야합니다.

expect(page).to have_current_path(user_promote_path) 
+0

감사합니다. 실제로 다른 사용자가없는 문제가있었습니다. 또한 내 페이지가 실제로 승격 후 users_path로 리다이렉트되기 때문에 user_promote_path는 올바른 해결책이 아닙니다. – katjass

+0

@katjass 확인 - 사용자가 승격되었음을 나타 내기 위해 눈에 보이는 변경 사항이 발생하더라도 테스트에서 확인해야하는 경로를 확인하는 것이 아니라 텍스트에 아이콘 변경, 클래스 변경 등이 있는지 확인해야합니다. –

0

당신이 오른쪽 페이지에있어 있는지 확인하려면, 당신은 몇 가지 디버깅을 수행 할 수 있습니다

  • save_and_open_page
  • save_and_open_screenshot
  • 은 (스크린 샷을 소요하고 개방) (브라우저가 열립니다)

괜찮 으면 카피 바라가 링크를 찾을 수 없습니다. 화면 크기/반응성 문제입니까? 그렇다면 Capybara가 사용하는 창 크기를 구성 할 수 있습니다 (link 참조)

테스트가 여전히 통과되지 않으면 기본적으로 링크가 표시되지 않을 수 있습니까? 정확도를 높이기 위해 visible: false의 옵션을 click_link에 추가 할 수 있습니다.

관련 문제