[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.유증에 대한 솔루션 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.나는이 문제를 정리 한 - 내가 잘못 사용자 로그인했다.
나는이 문제를 정리 한 - 내가 잘못 사용자 로그인했다.
내 시험은 읽기 토끼한다 :
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.그냥 한 번 더 힌트. 이것은 나를 위해 큰 일 :
그냥 한 번 더 힌트. 이것은 나를 위해 큰 일 :
http://brandonhilkert.com/blog/managing-login-passwords-for-capybara-with-minitest-and-rails-fixtures/
그리고 DRY 좋은 해결책이 될 것으로 보인다.
-
==============================
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
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
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비의 BigDecimal 전성 검사 (부동 소수점 newb) (0) | 2020.03.03 |
---|---|
[RUBY-ON-RAILS] 레일의 기본 날짜 및 시간 형식을 변경 4 (0) | 2020.03.03 |
[RUBY-ON-RAILS] 왜 RSpec에는 "장애 / 오류 : 역 추적에서 일치하는 라인을 찾을 수 없습니다"라는입니까? (0) | 2020.03.03 |
[RUBY-ON-RAILS] 왜 respond_with는 자신의 보석에 레일 4.2에서 제거되고? (0) | 2020.03.03 |
[RUBY-ON-RAILS] 레일 3 루비 어떻게 만드는 'OR'조건 (0) | 2020.03.02 |