ruby-on-rails - example - ruby on rails selenium
RSpec Rails Login Filter (2)
Hace poco cambié el uso de rspec-rails (2.6.1) con mi aplicación Rails (3.0.8). Estoy acostumbrado a Test :: Unit, y parece que no puedo obtener un filtro que funcione para mis métodos de prueba. Me gusta mantener las cosas lo más SECAS posible, así que me gustaría configurar un filtro al que pueda llamar en cualquier método de prueba que inicie sesión como usuario Authlogic antes de que se llame al método de prueba. Intenté lograr esto utilizando un filtro RSpec en spec_helper.rb:
config.before(:each, :login_as_admin => true) do
post "/user_sessions/create", :user_session => {:username => "admin", :password => "admin"}
end
Luego lo uso en el método de prueba correspondiente (en este caso spec / controllers / admin_controller_spec.rb):
require ''spec_helper''
describe AdminController do
describe "GET index" do
it("gives a 200 response when visited as an admin", :login_as_admin => true) do
get :index
response.code.should eq("200")
end
end
end
Sin embargo, aparece este error cuando ejecuto la especificación rspec :
Failures:
1) AdminController GET index gives a 200 response when visited as an admin
Failure/Error: Unable to find matching line from backtrace
RuntimeError:
@routes is nil: make sure you set it in your test''s setup method.
Blech. ¿Puedo enviar solo una solicitud HTTP por prueba? También traté de apagar mi método authenticate_admin (dentro del bloque config.before), sin suerte.
Deberías usar los macrones de shulda. Para usar debería modificar su spec_helper.rb
RSpec.configure do |config|
config.include Clearance::Shoulda::Helpers
end
Y luego puede configurar el filtro en la especificación del controlador como
require ''spec_helper''
describe AdminController do
fixture :users
before(:each) do
sign_in_as users(:your_user)
end
describe "GET index" do
it("gives a 200 response when visited as an admin", :login_as_admin => true) do
get :index
response.code.should eq("200")
end
end
end
Desafortunadamente, no hay forma en este momento de hacer lo que estás tratando de hacer en un gancho before
definido globalmente. La razón es que before
que los ganchos se ejecuten en el orden en que se registran, y los declarados en RSpec.configure
se registran antes de que rspec-rails
registre internamente para configurar el controlador, la solicitud, la respuesta, etc.
Además, esto ha sido reportado a https://github.com/rspec/rspec-rails/issues/391 .