2011-03-29 16 views
19

ayudante MétodoRspec: Configuración de las galletas en una prueba de ayudante

# Determine if this is user's first time 
    def first_time? 
    cookies[:first_time].nil? 
    end 

prueba Rspec Intento de

it "returns true if the cookie is set" do 
    cookies[:first_time] = "something" 
    helper.first_time?().should be(true) 
end 

error:

undefined method `cookies' for nil:NilClass 

Todo lo que he leído sobre Rspec y galletas tiene que hacer con el controlador. ¿Alguna forma de obtener/establecer cookies en las pruebas de ayuda Rspec?

(Rspec/RSpec-carriles 2.5, Carriles 3.0.4)

Gracias !!

ACTUALIZACIÓN:

encontrado una respuesta sobre cómo configurar las cookies, así que lo dejaré aquí por referencia de otros.

la pieza que estaba buscando:

helper.request.cookies[:awesome] = "something" 

todavía no saben cómo conseguir galletas ...

+0

Sólo por curiosidad, ¿por qué usted quiere conseguir las cookies? En las especificaciones, usted siempre es el que establece las cookies, para que sepa cuáles son. ¿No solo quieres probar que tu aplicación se comporta de cierta manera con las cookies configuradas de cierta manera? – radixhound

+0

GET es simplemente 'helper.request.cookies [: awesome]' –

Respuesta

17

La mejor explicación que he podido encontrar es aquí: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/cookies

Citado:

Recommended guidelines for rails-3.0.0 to 3.1.0

  • Access cookies through the request and response objects in the spec.
  • Use request.cookies before the action to set up state.
  • Use response.cookies after the action to specify outcomes.
  • Use the cookies object in the controller action.
  • Use String keys.

ejemplo:

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

# controller 
def some_action 
    cookies['foo'] = "modified #{cookies['foo']}" 
end 
+0

También tenga en cuenta que si establece cookies con símbolos como 'cookies [: foo] = true' tendrá la clave y valor convertido a cadena 'cookies ['foo'] = 'true'' – Calin

0

Usted recibe las galletas de la misma manera que las plantes. Ejemplo de una de mis especificaciones:

request.cookies[:email].should be nil 
+1

Extraño. Si coloco eso en mi especificación de ayuda, obtengo "variable local indefinida o solicitud de método '". si lo cambio a helper.request obtengo nil (aunque funciona bien funcionalmente y el código es sólido). Argh. – jmccartie

+0

aquí está la especificación que estoy tratando de ejecutar y sus resultados: https://gist.github.com/897722 – jmccartie

2

Me encontré con tu pregunta (estaba buscando una respuesta). He intentado esto con éxito:

helper.request.cookies[:foo] = "bar" 
0

En una prueba del controlador funciona esto:

@request.cookies[:cookie_name] = "cookie_value" 

en un bloque antes.

yo encontramos este here