2016-08-24 42 views
1

共有コンテキストを使用してRSpec要求仕様をDRYしようとしています。私はletの変数を共有コンテキスト間で共有して、互いに継承して拡張したいと考えています。予想通りtoken作品を宣言するが、NoMethodError示唆super()がnil 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ブロックの変数のうち、現在定義されている値を参照する方法がわかりません。 (私はそれを試してみると、私は "スタックレベルが深すぎる"取得します)あなたはこのようにしようとしていることをやっているだろう:

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

完璧、ありがとう! –

関連する問題