2016-08-24 2 views
1

공유 컨텍스트를 사용하여 RSpec 요청 사양을 건조하려고합니다. 공유 물음표 사이에 let 변수를 공유하여 서로 상속하고 확장 할 수 있습니다. 예상대로 token 작품을 선언하지만, NoMethodError 제안 super()이 전무하다 headers 수익을 대체 할 super()를 사용하여공유 컨텍스트간에 RSpec 변수를 공유하는 방법은 무엇입니까?

Rspec.shared_context 'JSON request' do 
    let(:headers) do 
    { 
     'Accept' => 'application/json' 
    } 
    end 
end 

Rspec.shared_context 'Authenticated request' do 
    let(:headers) do 
    super().merge('Authorization' => "Bearer #{token}") 
    end 
end 

Rspec.describe 'user management' do 
    let(:token) { create(:oauth_token) } 

    include_context 'JSON request' 
    include_context 'Authenticated request' 

    it 'responds with a 200 ok' do 
    get '/user', headers: headers 
    expect(response).to have_http_status(:ok) 
    end 
end 

.

답변

2

let 블록에서 let 변수의 현재 정의 된 값을 참조하는 방법을 알지 못합니다. (나는 그것을 시도 할 때 "스택 레벨이 너무 깊다.") 나는 당신이 이런 식으로하려고하는 것을 할 것이다 :

Rspec.shared_context 'JSON request' do 
    let(:common_headers) do 
    { 
     'Accept' => 'application/json' 
    } 
    end 
    let(:headers) { common_headers } 
end 

Rspec.shared_context 'Authenticated request' do 
    let(:headers) do 
    common_headers.merge('Authorization' => "Bearer #{token}") 
    end 
end 
+0

완벽하니, 감사합니다! –

관련 문제