2013-12-11 6 views
9

मैं बाहरी सेवाओं से अनुरोध लेने वाले खान के नियंत्रक के लिए परीक्षण लिखने की कोशिश कर रहा हूं।हेडर्स को रुपेक नियंत्रक परीक्षणों में जोड़ना

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 

यह documentation मैं कर सकता find के अनुसार काम करना चाहिए: अब तक यह मेरी परीक्षा है।

मेरे नियंत्रक अभी इस तरह दिखता है:

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

जब मैं अपने परीक्षण में जिज्ञासा में हो और request.headers['X-Indeed-Signature'] के मान की जाँच करने की कोशिश मैं हमेशा बस nil

मिल वहाँ कुछ है कि मैं गायब हूँ मैं रेल 3.2 और Rspec 3

उत्तर

7

मैं ठीक करने में सक्षम था यह @request.env बजाय @request.headers का उपयोग कर तो जैसे द्वारा:

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

उपयोग कर रहा हूँ मुझे लगता है कि आप (सीधे अपने लिंक में से एक से)

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

आप विषय की जरूरत नहीं करना चाहते (: प्रतिक्रिया)

+2

यह पता चला है कि मुझे वास्तव में '@ request.env ['ex-Indeed-Signature']' @ request.headers' –

+7

के बजाय उपयोग करने की आवश्यकता है, ऐसा लगता है कि आपको रेल में '@ request.env' की आवश्यकता है 3 और '@ request.headers' रेल 4 में। –

0

ठीक है इस rspec की बहुत मूर्खतापूर्ण है।

अनुरोध चश्मा

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

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

में और अपने नियंत्रक में कस्टम हेडर:

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

नियंत्रक चश्मा

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

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

में और अपने नियंत्रक में कस्टम हेडर:

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

बस दोनों के बीच मतभेदों को साझा करना। मुझे विश्वास नहीं है कि मेरे पास आरएसपीईसी या रेल में दो अलग-अलग स्पेक प्रकार के हेडर अलग-अलग रखने के लिए कोई विशेष कॉन्फ़िगरेशन है।

संबंधित मुद्दे