2014-12-02 4 views
0

작은 웹 응용 프로그램에서 인증 용으로 devise를 사용하고 있으며 몇 가지 통합 테스트를 작성하는 데 몇 가지 문제가 있습니다.레일 4는 통합 테스트를 고안합니다. 영구 사용자입니까?

테스트는

  • 로그인으로, 간단하게하려고하는 것은 ...

  • 로그인이 잘못된 자격 증명

  • 으로 거부 유효한 자격 증명을 사용하여 작동

레일에 설명 된 기술을 사용하여 자습서,하지만 자국 인증 시스템에 대한 저항이 아닌, 나는 그것을 고의적으로 수리하려고 시도하고있다.

아무런 문제없이 sign_in 함수를 사용할 수 있습니다. 컨트롤러 테스트 중 하나 또는 두 개에서이를 수행하고 있습니다.

require 'test_helper' 

class mySimpleControllerTest < ActionController::TestCase 

    include Devise::TestHelpers 

    def setup 
    @user = User.create!(
     :firstname => "ANOther", 
     :surname => 'Person', 
     :username=> 'aperson', 
     :email => '[email protected]', 
     :password => 'pass123', 
     :password_confirmation => 'pass123' 
    ) 
    sign_in @user 
    end 

    test "should get home" do 
    get :home 
    assert_response :success 
    assert_select "title", "TEST PAGE" 
    end 
end 

잘 작동합니다. 내가 가진 문제는 로그인 기능 테스트를위한 통합 테스트입니다. 일부 테스트는 로그 아웃 된 동작에 대해 검사해야하고, 일부는 로그인 한 것으로, 기타는 재설정 된 암호 등에 대해 확인해야하므로 설정 및 티 아웃 기능을 필요로하지 않습니다.

다음 테스트는 항상 유효하지 않은 사용자 이름과 암호를 입력하십시오. 결국, 사용자 이름이나 비밀번호가 틀렸을 때이 테스트를 통과 시키길 원하지만, 지금은 그것이 맞는지 여부에 관계없이이 방법으로 응답합니다.

require 'test_helper' 

class UsersLoginTest < ActionDispatch::IntegrationTest 

    test "should be redirected if root_path is called when logged out" do 
    get root_path 
    assert_response :redirect 
    end 

    test "login with invalid information" do 
    get new_user_session_path 
    assert_template 'devise/sessions/new' 
    post user_session_path, 'user[email]' => '[email protected]', 'user[password]' => 'pass123' 

... 

내 테스트 데이터베이스에 실제 사용자가 포함되어 있지 않아 실제로 사용자 테이블이 비어 있기 때문입니다. 어떤 사용자가 아니기 때문에 잘못된 사용자 이름이나 암호로 응답해야합니다. 그러나이 경우 rake test을 호출 할 때 테스트 데이터베이스가이 기본 사용자로 채워지는 것을 어떻게 보장 할 수 있습니까?

답변

1

이 작업을 수행하는 몇 가지 방법을 시도한 후에 결국 RSpec 및 Capybara로 모든 테스트를 이동 했으므로 폼에 데이터를 게시 할 수 있습니다.

영속적 인 사용자에게 문제가 있는지 여부를 테스트했는데, 그렇지 않은 것으로 보입니다. 문제는 그 것처럼 보였습니다

post user_session_path, 'user[email]' => ... 

실제로 게시 할 것 같지 않았습니다.

관련 문제