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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top