ruby on rails - tutorial - Anexar encabezados a las pruebas del controlador Rspec
rspec with rails (3)
Pude arreglarlo usando @request.env
lugar de @request.headers
así:
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
Estoy intentando escribir pruebas para un controlador mío que atiende las solicitudes de servicios externos. Hasta ahora esta es mi prueba:
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
Esto debería funcionar de acuerdo con la documentación que pude encontrar .
Mi controlador ahora se ve así:
class ApplyController < Application Controller
def indeed
binding.pry
end
end
Cuando me meto en Pry en mi prueba y trato de verificar el valor de request.headers[''X-Indeed-Signature'']
siempre obtengo nil
¿Hay algo que me falta? Estoy usando Rails 3.2 y Rspec 3
Creo que quieres (directamente desde uno de tus enlaces)
it "returns 200 ok"
@request.headers[''X-Indeed-Signature''] = signature
post :indeed, parameters
response.status.should == 200
end
No necesitas sujeto (: respuesta)
Ok, esto es bastante tonto de rspec.
Encabezados personalizados en especificaciones de solicitud
headers = {
''AUTH'' : ''super secret key''
}
post ''/api/some_action'', { user_id: 1337 }.to_json, headers
Y en tu controlador:
def some_action
token = request.headers[''AUTH'']
end
Encabezados personalizados en Controller Specs
headers = {
''AUTH'' : ''super secret key''
}
post ''/api/some_action'', { user_id: 1337 }, headers
Y en tu controlador:
def some_action
token = request.headers[''rack.session''][''AUTH'']
end
Solo compartiendo las diferencias que tuve entre los dos. No creo que tenga ninguna configuración especial en rspec o rails para que los dos encabezados de tipos de especificaciones diferentes se coloquen de forma diferente.