2012-07-03 11 views
5

Sto cercando di passare un cookie quando si fa una richiesta GET, utilizzando RSpec 2 e 3. rotaiePassando biscotti in richiesta spec

Ho provato la seguente finora.

get "/", {}, {"Cookie" => "uuid=10"} # cookies[:uuid] is nil 
request.cookies[:uuid] = 10 # request is nil 
@request.env["Cookie"] = "uuid=10" # @request is nil 
helper.request.cookies[:uuid] # helper is not defined 
cookies[:uuid] = 10 # cookies[:uuid] is nil 
controller.cookies[:uuid] = 10 # cookies is nil 

È possibile?

risposta

2

Ho avuto un problema simile e non ho trovato una soluzione adeguata a questo.

stato rspec-rails docs che dovrebbe essere possibile:

# spec 
request.cookies['foo'] = 'bar' 
get :some_action 
response.cookies['foo'].should eq('modified bar') 

nella mia spec request è sempre nil prima di eseguire un GET.

ora sto beffardo i biscotti:

before { ActionDispatch::Request.any_instance.stubs(cookies: {locale: :en}) } 

this guy ha un problema simile.

+0

La documentazione che si collega ad sono per le specifiche del controller, senza richiedere specifiche, ed è per questo '' ritorna request' quelle negative. Anche cercando di capire come farlo in RSpec 3.4. –

1

Per this answer, è possibile utilizzare il metodo cookies entro richiesta specifiche:

before { cookies['foo'] = 'bar' } 

ho provato la soluzione @ di phoet coinvolge ActionDispatch::Request.any_instance.stubs, ma getta un errore insieme a un messaggio di disapprovazione apparentemente non correlati in RSpec 3.4.

0

ero un po 'confuso da come avete fatto queste cose in un primo momento, ma in realtà è molto semplice. All'interno di ActionDispatch :: IntegrationTest di Rails (o nel caso di rspec una specifica :request) hai accesso a una variabile dei cookie.

funziona così:

# set up your cookie 
cookies["fruits"] = ["apple", "pear"] 

# hit your endpoint 
get fruits_path, {}, {} 

# this works! 
expect(cookies["fruits"]).to eq(["apple", "pear"])