2017-12-19 20 views
0

응용 프로그램 용 API를 개발 중입니다. 매개 변수가 필요한 경로에 대해 rspec 요청 테스트를 작성하려고하지만 또한 사용자에게 속하며 액세스하려면 JWT 토큰이 필요합니다.Rspec을 구조화하는 방법 사용자 인증을 요구하는 API에 대한 요청 테스트

예를 들어, 내가 어떻게 그 I도의 stocklist이있는 사용자를 필요로 할 경우 경로 POST /stocklist/:stocklist_id/balance/show

을 테스트하기위한 스펙을 작성합니다. FactoryGirl을 사용하고 있으며 공장을 사용한 기능 테스트가 있지만 테스트에서 많은 부분을 통합하는 방법을 잘 모르겠습니다.

답변

0

랙 테스트를 사용할 수 있습니다. 다음은

https://github.com/rack-test/rack-test

은 예입니다. 먼저 사용자 및 관련 stock_list를 만듭니다. 기능 테스트에서이 작업을 수행하는 예제가 있어야합니다. 그런 다음 필요한 토큰을 전달할 방법을 찾아야합니다. 랙 테스트에서는 매개 변수를 전달할 수 있습니다. 테스트 환경에서 작동하는 키의 키와 값을 전달해야합니다. 그런 다음 컨트롤러 동작이 실제로 원하는 결과를 생성하는지 테스트 할 수 있습니다. 여기서 우리는 어떤 모델의 개수가 0이고 그 중 하나가 포스트 작업에서 생성된다고 가정합니다.

describe 'my_api' do 
    let!(:user){ create :user } 
    let!(:stock_list){ create :stock_list, user: user } 

    specify do 
    expect(SomeModel.count  ).to eq 0 
    post "/stocklist/#{stock_list.id}/balance/show", { token: "some_token" } 

    expect(SomeModel.count  ).to eq 1 
    expect(last_response.status).to eq 200 
    expect(JSON.parse(last_response.body, symbloize_keys:true)[:my_value]).to eq 'something' 
    end 
end 
0

이 같은 로그인 한 사용자 반환하는 컨트롤러 메소드, 조롱 할 수 있습니다 필요한 경우도 인증 토큰 HTTP 헤더를 설정할 수 있습니다

@user = FactoryGirl.create :user 
# populate user with relationship objects 

expect(controller).to_receive(:current_user).and_return(@user) 

request.env['HTTP_AUTHORIZATION'] = token