with tutorial tests test run rails how ruby-on-rails ruby ruby-on-rails-3 rspec rspec-rails

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.