2016-07-08 3 views
1

OAuth2로 부분적으로 보호 된 Rails API에 대한 RSpec 테스트를 작성하고 있습니다. access_token가 제공되지 않은 경우 access_tokenOAuth2 액세스 토큰이 필요한 RSpec 테스트를 작성하려면 어떻게해야합니까?

  • 자원
  • 의 목록을 보여줍니다 제공 될 때 나는

    • GET ResourcesController#index
      • 등의 테스트를 작성해야
        • 어떤 내용을 같은

    물건을 반환하지 않습니다. 내가 oauth2 보석을 사용할 수 있다고 생각했지만, 곧 Rails 응용 프로그램에 실제 HTTP 요청을 발행하여 작동한다는 것을 알게되었습니다. 나는 길을 잃었 어. 누군가 나를 올바른 방향으로 향하게 할 수 있니?

    편집 내가 OAuth2를 구현하는 Doorkeeper를 사용하고 일부 추가 정보를 원하시면

    .

    before_action :doorkeeper_authorize!, only: [:update, :destroy] 
    

    인증 토큰의 존재 및 유효성을 확인합니다 : 내 문제는 내 컨트롤러의 몇 가지 방법은 다음과 같은 것을 뒤에 숨겨져 있다는 사실과 관련이있다. 이제 이러한 토큰이 데이터베이스에 존재해야합니다. 내 질문은 내가 어느

    • 데이터베이스에이 토큰을 넣어 (일명, 내가 올바른 RSpec에 테스트에서 로그인 시뮬레이션 어떻게) (스텁을 통해?), 또는
    • 트릭 문지기를 생각하는 어떻게입니다 이 토큰은 존재하고 유효합니까?

    EDIT 2

    this 알았다. 이 글을 읽는 동안 답변을 계속 추가하십시오.

  • 답변

    1

    여전히 oauth2 보석을 사용할 수 있습니다. its own test suite에 스터 빙 액세스 토큰의 많은 예가 있습니다. 특별히 지적한 문제 없이는 더 많은 조언을하는 것이 어려울 수도 있습니다.

    또는 http 작업을 기록하고 테스트 중에이를 재생하는 vcr gem이 있습니다. 라이브 API 상호 작용을 기록한 다음 재생을 사용하여 테스트를 실행할 수 있습니다. 당신이 문지기를 언급하고 문서를 직접 발견 한 후

    UPDATE

    , 여기에 same source에서 예입니다.

    describe Api::V1::ProfilesController do 
        describe 'GET #index' do 
        let(:token) { double :acceptable? => true } 
    
        before do 
         controller.stub(:doorkeeper_token) { token } 
         # allow(controller).to receive(:doorkeeper_token) {token} # => RSpec 3 
        end 
    
        it 'responds with 200' do 
         get :index, :format => :json 
         response.status.should eq(200) 
        end 
        end 
    end 
    

    스텁 : 허용? => true는 토큰이 유효하기 때문에 문지기 필터를 우회합니다. false를 반환하기를 원할 경우 응답 상태는 권한이없는 401이됩니다.

    +0

    감사합니다. 나는이 예제들을 보았지만 테스트에서 재사용하는 방법을 찾지 못했습니다. 나는 내 질문에 몇 가지 세부 사항을 추가했다. – Morpheu5

    +0

    좋아요, 토큰이 유효하지 않을 때 내 컨트롤러가 오작동하지 않도록하거나 토큰이 유효하지 않은 사용자에게 유효한지 확인하려면 어떻게해야합니까? 행위? – Morpheu5

    +0

    '허용? => 거짓? –

    관련 문제