2016-12-11 3 views
0

capybara를 사용하여 로그인 양식을 테스트하는 로그인을 시뮬레이트하려하지만 전자 메일 또는 암호 필드를 찾을 수 없습니다.Capybara가 올바른 ID로 양식 필드를 찾을 수 없습니다

올바른 ID를 사용하고 있는지 확인하기 위해 페이지 소스를 확인했으며 필드 이름을 사용해 보았습니다.

it "returns http success" do 
     user = FactoryGirl.create(:user) 
     visit sessions_new_path 
     fill_in 'email', :with => user.email 
     fill_in 'password', :with => user.password 
     click_button('submit') 
     expect(response).to have_http_status(:success) 
    end 

내 양식 :

= form_for(:session, url: login_path, :html => {class: 'login_form'}) do |f| 
    .field 
     = f.email_field :email, 'data-msg-required' => t('email_required'), :placeholder => t('.form_email'), id: 'email' 
    .field 
     = f.password_field :password, 'data-msg-required' => t('password_required'), :placeholder => t('.form_pwd'), id: 'password' 
    = f.submit t('.form_sbmt'), class: 'btn-submit' 

ID가 (각각의 필드)의 이메일과 비밀번호로 나와있는 페이지 소스보기 및 이름 여기

내 현재 테스트입니다 "session [email]"형식을 따르십시오. 필자는 fill_in에 대해 "sessions [email]"(그리고 암호에 대해 equiv)를 시도했지만 운이 없었습니다.

오류 내가 갖는 : 어떤 도움을 주시면 감사하겠습니다

Failure/Error: fill_in 'email', :with => user.email 

    Capybara::ElementNotFound: 
     Unable to find field "email" 

.

답변

1

카피 바라는 컨트롤러 테스트에 사용되지 않습니다. Capybara는 앱의 엔드 - 투 - 엔드 테스트 (기능 테스트)에 사용되며 컨트롤러 테스트에만 국한되지 않습니다. 작업에 대한 컨트롤러 테스트는 매우 빠르며 뷰를 렌더링 할 필요가 없으며

과 같아야합니다.

0

그래서 답을 찾았습니다. Rspec이 컨트롤러 테스트를 실행할 때 뷰를 렌더링하지 않는다는 것을 알지 못했습니다 (뷰가 별도로 테스트 될 것으로 기대됨). 뷰를 렌더링하기 위해 컨트롤러 테스트를 얻으려면 renders_view을 describe-do 블록 중 하나에 추가해야합니다 (it-do 블록 안에 있지 않음).

내 테스트가 작동하는 것 같습니다.

의견에서 논의 된 적절한 답변은 아닙니다.

+0

Capybara를 컨트롤러 테스트에 사용해서는 안됩니다. 기능 테스트 (및 시력 검사의 marcher) –

+0

에 대해 알고 있지만 내 세션의 동작을 테스트하는 다른 방법을 알지 못했습니다. 내가 글을 올리려고 할 때 나는 그것을 작동시키지 못했습니다. – Isengrim

+1

컨트롤러 테스트에서 잘못된 것을 테스트하는 것처럼 들립니다. 전체 컨트롤러/뷰/라우팅 테스트를 수행하려면 기능 테스트 여야합니다. 컨트롤러 테스트를 작성하는 경우 컨트롤러가 설정 한 변수와 컨트롤러 동작의 응답 만 테스트해야합니다. 귀하의 예제에서 컨트롤러 테스트는 기본적으로'post : create, session : {email : user.email, password : user.password};와 같아야합니다. 기대 (응답) ... ' –

관련 문제