2013-12-11 10 views
9

Próbuję zapisać testy dla kontrolera, który pobiera żądania z usług zewnętrznych. Do tej pory jest to moja próba:Dołączanie nagłówków do testów kontrolera Rspec

describe ApplyController do 
    context 'when valid' do 
    let(:parameters) do 
     file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json' 
     JSON.parse(File.read file) 
    end 
    let(:signature) { 'GC02UVj0d4bqa5peNFHdPQAZ2BI=' } 

    subject(:response) { post :indeed, parameters, 'X-Indeed-Signature' => signature } 

    it 'returns 200 ok if Request is valid' do 
     expect(response.status).to eq 200 
    end 
    end 
end 

ten powinien działać zgodnie z documentation mogłem find.

Mój kontroler teraz wygląda mniej więcej tak:

class ApplyController < Application Controller 
    def indeed 
    binding.pry 
    end 
end 

Kiedy dostać się wtrącać w moje badania i próby w celu sprawdzenia wartości request.headers['X-Indeed-Signature'] I zawsze po prostu nil

Czy jest coś, co ja jestem zaginiony? Używam Rails 3.2 i rspec 3

Odpowiedz

7

udało mi się naprawić to za pomocą @request.env zamiast @request.headers tak:

describe ApplyController do 
    context 'when valid' do 
    let(:parameters) do 
     file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json' 
     JSON.parse(File.read file) 
    end 
    let(:signature) { 'GC02UVj0d4bqa5peNFHdPQAZ2BI=' } 

    it 'returns 200 ok if Request is valid' do 
     @request.env['X-Indeed-Signature'] = signature 
     post :indeed, parameters 
     expect(response.status).to eq 200 
    end 
    end 
end 
16

Myślę, że chcesz (prosto z jednego z linków)

it "returns 200 ok" 
    @request.headers['X-Indeed-Signature'] = signature 
    post :indeed, parameters 
    response.status.should == 200 
end 

Nie musisz obiekt (: Odpowiedź)

+2

Okazuje się, że faktycznie potrzebowałem użyć '@ request.env ['X-Indeed-Signature']' zamiast '@ request.headers' –

+7

Wygląda na to, że potrzebujesz' @ request.env' w Railsach 3 i '@ request.headers' w Railsach 4. –

0

Ok to dość głupie z RSpec.

niestandardowe nagłówki w żądaniu Specs

headers = { 
    'AUTH' : 'super secret key' 
} 

post '/api/some_action', { user_id: 1337 }.to_json, headers 

aw kontrolerze:

def some_action 
    token = request.headers['AUTH'] 
end 

niestandardowe nagłówki kontroler Specs

headers = { 
    'AUTH' : 'super secret key' 
} 

post '/api/some_action', { user_id: 1337 }, headers 

aw kontrolerze:

def some_action 
    token = request.headers['rack.session']['AUTH'] 
end 

Wystarczy podzielić się różnicami, które miałem między tymi dwoma. Nie sądzę, żebym miał jakąś specjalną konfigurację w rspec lub szynach, aby dwa różne nagłówki typów specyfikacji mogły być ustawione inaczej.