2012-01-24 13 views
7

En mi aplicación Rails, estoy accediendo al hash de env en una de las acciones de mi controlador.¿Por qué el hash de env del rack está vacío en el entorno de prueba Rails?

Algo a lo largo de las líneas de:

def my_before_filter 
    env['some.key'] = "Something or other" 
end 

Esto funciona muy bien para mis necesidades.

si comienzo mi aplicación Rails en el entorno de prueba, y visitar una acción como:

# /users in UsersController#index 
def index 
    puts env.inspect 
end 

A continuación, el contenido del hash env se emite a la consola como se esperaba.

Cuando obtengo esta acción desde un ejemplo de RSPec, ¿el resultado es un hash vacío?

it 'should get the index action' do 
    get :index 
end 

.....{}.... # rspec output 

¿Por qué está env hash empty?

He construido una aplicación dummy rails mostrar esta

+0

Creo que se supone que debes ejecutarlo en un entorno de "desarrollo". – Reactormonk

+0

Normalmente lo ejecuto en entorno de desarrollo. El hash de env estuvo presente en el desarrollo. Quería mencionar que el comportamiento que veo cuando reinicio manualmente el servidor en modo "prueba" no es el mismo comportamiento que veo al crear una solicitud a través del banco de pruebas. – bodacious

Respuesta

10

uso

request.env 

en lugar de sólo env dentro del código del controlador.

por ejemplo/

def index 
    puts request.env.inspect 
end 

Espero que ayude?

BTW en otra nota: cuando se trabaja con su repositorio de github, debe eliminar el public/index.html para que la ruta raíz funcione, al ejecutar el servidor.

+0

Hola, gracias por los comentarios ... esto todavía no responde por qué el hash de env no está disponible en el controlador directamente. PS - actualizado el repos – bodacious

+3

Es porque rspec-rails pasa por alto el método ActionController :: Metal dispatch – gef

+0

Ah - gracias gef – bodacious

Cuestiones relacionadas