Filtro de inicio de sesión de RSpec Rails
-
29-10-2019 - |
Pregunta
Recientemente comencé a usar rspec-rails(2.6.1) con mi aplicación Rails(3.0.8).Estoy acostumbrado a Test::Unit y parece que no puedo hacer que funcione un filtro para mis métodos de prueba.Me gusta mantener las cosas lo más SECO posible, por lo que me gustaría configurar un filtro que pueda invocar en cualquier método de prueba que inicie sesión como usuario de Authlogic antes de que se llame al método de prueba.Intenté lograr esto usando 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 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.
Blanquear.¿Puedo enviar solo una solicitud HTTP por prueba?También intenté eliminar mi método authenticate_admin (dentro del bloque config.before), sin suerte.
Solución
Desafortunadamente, en este momento no hay manera de hacer lo que estás intentando hacer en un entorno definido globalmente. before
gancho.La razón es que before
Los ganchos se ejecutan en el orden en que se registran y los declarados en RSpec.configure
están registrados antes que el que rspec-rails
se registra internamente para configurar el controlador, solicitud, respuesta, etc.
Además, esto ha sido informado a https://github.com/rspec/rspec-rails/issues/391.
Otros consejos
Debes usar las macrones de Shulda.Para usar ShoulDa 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