2017-12-14 6 views
1
  • 레일 (5.1.4)
  • RSpec에 레일 (3.7.2)
  • 카피 바라가 (2.16.1)
  • 유증 (4.3.0)

내가하려고 해요 https://relishapp.com/rspec/rspec-rails/v/3-7/docs/system-specs/system-spec에서와 같이 RSpec Rails 3.7 시스템 스펙을 작성하십시오.RSpec + Capybara + Devise : current_user?

또한 Devise 권한을 적용하고 싶습니다. 나는 그 지시를 따랐다. https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

그러나 결함이있는 구현이라고 생각한다. 나는 메쏘드를 얻지 못했다. (즉, nil). 여기

내 간단한 사양 :

require 'rails_helper' 

RSpec.describe "testing system", type: :system do 

    it "tests the spec" do 

    admin = create(:admin) # user-admin 

    login_as(admin, :scope => :admin) 

    visit root_path 

    click_link 'Home' 

    save_and_open_page 

    end 
end 

내 사이트에 코드가 current_user 값에 크게 의존하기 때문에, 나는 제대로 형성 저장된 페이지를하지 않습니다 (사용자가 로그인하지 않은 것 같습니다) .

어떻게해야합니까? 단순히 수동으로 (어떻게 든?) 값을 current_user에 할당해야합니까? 또는 https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara 전략이 ​​주로 결함이며 더 완벽한 기술로 대체되어야합니까? 하지만 결과 -

나는 이미 내 코드에

current_user = admin 

를 만들기 위해 노력했다.

답변

2

devise 위키는 로그인을 단축하는 동안 테스트하는 방법에 적합합니다. 테스트 코드에서 current_user을 설정할 수없고 요청 내에 만 설정되기 때문에 액세스 할 수 없습니다. 일반적으로 오류는 광범위하게 사용되고 매우 잘 테스트 된 보석에 결함이있는 것이 아니라 보석 사용에 있다고 가정합니다. 실제로 사용자가 로그인하지 그 이유의 숫자가있을 수 준 설명과

그러나이 가장 가능성이 범인은

  1. 당신은 고안에 구성된 여러 범위 실제로이 있니? 아니면 그냥 login_as(admin, :scope => :user) # login_as (admin)와 동일 #

  2. puma 테스트는 단일 모드 또는 클러스터 모드입니까? (퓨마 출력을 억제 할 필요가 있습니다. rspec-rails는 기본적으로 - https://github.com/rspec/rspec-rails/blob/95f4522c0549a32de59c19eb9b5f9a72126a9eb6/lib/rspec/rails/example/system_example_group.rb#L72입니다 - 테스트 결과에서 볼 수 있습니다) 만약 이것이 단일 모드가 아니라면 앱은 Devise를 의미하는 테스트와는 별도의 프로세스에서 실행되고 있습니다 실제로 로그인을 단락시킬 수 없으며 퓨마 설정을 수정해야합니다.

+0

예, 문제는'login_as (admin, : scope => : user)'및'login_as (admin)'도 마찬가지입니다. Devise 문서만으로는 충분하지 않았습니다. 그리고 물론, 필자는 사양 내에서'current_user'에 액세스 할 필요가 없습니다. 테스트중인 코드 내에서만 작동하도록 필 요합니다. 감사. – prograils