복붙노트

[RUBY-ON-RAILS] 레일 및 고안와 기능 테스트. 내 비품에 무엇을 넣어?

RUBY-ON-RAILS

레일 및 고안와 기능 테스트. 내 비품에 무엇을 넣어?

안녕 내 레일의 일부 기능 테스트를 고안 및 캉캉을 사용하여 3 응용 프로그램을 꿔.

내 사용자 모델에서 나는, 나는 그들이 경우 사용자는 특정 페이지를 방문 할 수 있는지 테스트 할 사용자의 나이를 가지고 :

* sign_in * 나는 내 테스트에 넣어하고이 작업에 나타납니다 - 내가 가지고 있기 때문에 테스트가 오류를하지 않는 : 나는 내가 사용할 수있는 고안 문서에서 볼 수있다 :

include Devise::TestHelpers

내 * test_helper.rb에서 *

나는 그것을 꺼내 때 * sign_in *이 정의되어 있지 않기 때문에 내 테스트 오류 않습니다. 그래서 도우미 문제가되지 않습니다.

내가 테스트를 실행하고 스팬 #의 loggedin 0 발생이 있기 때문에 테스트가 실패 하나 명의 발생을 가지고 있는지 확인합니다. 스팬 #의 loggedin는 경우에만 * 표시 user_signed_in? *

나는 (등 확인)도 완벽하게 가입 사용자입니다 테스트 사용자를 만들 내 비품 또는 테스트에 넣어하려면 무엇이 필요합니까?

코드보기 :

<% if user_signed_in? %>
     <span id="loggedin">User is signed in</span>
     User age is <span id="age"><%= current_user.age.to_s %></span>
<% end %>

시험 코드 :

test "should get index" do
    sign_in :one
    get :index
    assert_response :success
    assert_select 'span#loggedin', :count => 1
end

고정물:

one:
 email: jez@example.com
 age: 36

내가 수동으로 로그인 할 때 개발 괜찮 작동하지만 나는 모든 것을 자동화하는 바라고 있어요 - 정말 테스트의 포인트!

해결법

  1. ==============================

    1.유증에 대한 솔루션 3.2.0 사전

    유증에 대한 솔루션 3.2.0 사전

    나는 이것이 당신이 찾고있는 것 같아요 :

    User.new.send(:password_digest, 'password')
    

    소금이 nil 일 때 작동합니다.

    그러므로 당신의 고정에 당신은이 작업을 수행 할 수 있습니다

    one:
      email: 'some@user.com'
      encrypted_password: <%= User.new.send(:password_digest, 'password') %>
    

    유증 버전 3.2.0에 3.5.0를위한 솔루션

    3.2.0 고안에서, 방법은이 목적 (@Inkling 업데이트)에 대해 정밀하게 만들어졌다. 이 버전의 encrypted_password는은 다음과 같이 정의한다 :

    encrypted_password: <%= Devise.bcrypt(User, 'password') %>
    

    여기서 사용자는 사용자 모델의 클래스입니다.

    기본 암호화 알고리즘 (bcrypt)를 사용하는 경우이 만 적용됩니다.

    유증 버전 3.5.1 이상을위한 솔루션

    Katarzyna가 지적했듯이 : Device.bcrypt 버전 3.5.1에서 더 이상 사용되지 않습니다. 이 버전에서, encrypted_password는은 다음과 같이 정의한다 :

    encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
    
  2. ==============================

    2.나는이 문제를 정리 한 - 내가 잘못 사용자 로그인했다.

    나는이 문제를 정리 한 - 내가 잘못 사용자 로그인했다.

    내 시험은 읽기 토끼한다 :

    test "should get index" do
        @user = users(:one)
        sign_in @user
        get :index
        assert_response :success
        assert_select 'span#loggedin', :count => 1
     end
    

    이것은 또한 작동 코드의 라인을 제거 :

    test "should get index" do
        sign_in users(:one)
        get :index
        assert_response :success
        assert_select 'span#loggedin', :count => 1
    end
    

    설비의 나의 이해는 부족한 ...

    하지만 문제 다시 - 비품에 어떤 내용 :

    one:
     email: jez@example.com
     encrypted_password: $2a$10$PoBe1MvkoGJsjMVTEjKqgeBUp.xdfzWoiDjBzQhtLAj16NqIa2fOy
     password_salt: $2a$10$PoBe1MvkoGJsjMVTEjKqge
     reset_password_token: nil
     remember_token: nil
     remember_created_at: nil
     sign_in_count: 1
     current_sign_in_at: 2011-01-02 08:31:23
     last_sign_in_at: 2011-01-02 08:31:23
     current_sign_in_ip: 127.0.0.1
     last_sign_in_ip: 127.0.0.1
     confirmation_token: nil
     confirmed_at: 2011-01-02 08:31:23
     confirmation_sent_at: 2011-01-02 08:30:59
     failed_attempts: 0
     unlock_token: nil
     locked_at: nil
     authentication_token: nil
     created_at: 2011-01-02 08:30:59
     updated_at: 2011-01-02 08:31:23
     age: 36
    

    지금은 작동합니다. 고정물로 디바이스에서 사용자를 생성하고 데이터를 붙여 넣기하는 게시물을하시기 쉬운이 있다면.

  3. ==============================

    3.그냥 한 번 더 힌트. 이것은 나를 위해 큰 일 :

    그냥 한 번 더 힌트. 이것은 나를 위해 큰 일 :

    http://brandonhilkert.com/blog/managing-login-passwords-for-capybara-with-minitest-and-rails-fixtures/

    그리고 DRY 좋은 해결책이 될 것으로 보인다.

  4. ==============================

    4.그것은 나를 위해 일하고있다.

    그것은 나를 위해 일하고있다.

    내 사용자기구에 아무것도 변경하지 않았다, 이렇게하는 거예요

    one:
      id: 1
      name: MyString
      email: mystring@test.com
      group_id: 2
      encrypted_password: <%= Devise.bcrypt(User, 'password') %>
    

    하지만 내 test_helper.rb을 변경하고 나는 (이 모든 컨트롤러 테스트를 위해 작동합니다) 클래스 ActionController이 추가 :

    class ActionController::TestCase
        include Devise::TestHelpers
    
        setup do
            sign_in users(:one)
        end
    end
    
  5. from https://stackoverflow.com/questions/4577737/functional-testing-with-rails-and-devise-what-to-put-in-my-fixtures by cc-by-sa and MIT license