2011-09-01 6 views
7

Possiedo un'applicazione Rails 3.1 che è stata creata come API RESTful. Il piano è di gestire l'autenticazione basata su una chiave API che viene passata su ogni richiesta tramite l'intestazione HTTP di autorizzazione. Per testare questa in RSpec, ho voluto impostare l'attributo request.env["HTTP_AUTHORIZATION"] nel blocco config.before:RSpec.configure e l'oggetto richiesta

RSpec.configure do |config| 
    config.mock_with :rspec 
    config.use_transactional_fixtures = true 
    config.before(:each) do 
    # Set API key in Authorization header 
    request.env["HTTP_AUTHORIZATION"] = "6db13cc8-815f-42ce-aa9e-446556fe3d72" 
    end 
end 

Purtroppo, questo genera un'eccezione perché l'oggetto request non esiste nel blocco config.before.

C'è un altro approccio per impostare questa intestazione al di fuori di includere nel blocco before di ciascun file di test del controller?

risposta

2

Non ho provato io stesso, ma gruppo di esempi forse creando condivisi si potrebbe aiutare a risolvere il problema:

shared_examples_for "All API Controllers" do 
    before(:each) do 
    request.env["HTTP_AUTHORIZATION"] = "blah" 
    end 

    # ... also here you can test common functionality of all your api controllers 
    # like reaction on invalid authorization header or absence of header 
end 

describe OneOfAPIControllers do 
    it_should_behave_like "All API Controllers" 

    it "should do stuff" do 
    ... 
    end 
end 
Problemi correlati