2011-08-04 20 views
5

Tengo todas mis pruebas de capibara trabajando con mi área de miembros authlogic usando el controlador predeterminado, pero cuando cambio una prueba para usar el controlador de selenio ya que tiene ajax, le da a mi Theis error:authlogic no funciona con carpincho cuando se usa el controlador de selenio

You must activate the Authlogic::Session::Base.controller with a controller object before creating objects 

cosas están trabajando con controlador predeterminado para authlogic así es necesario que sea algo que ver con el selenio ??

Tengo incluyen Authlogic :: TestCase en mi spec_helper y

activate_authlogic 
    domain.user_sessions.create(user) 

en una antes de cada.

¿Alguien me ayuda con esto por favor?

gracias Rick

Respuesta

3

creo que el siguiente código trabajará para activar authlogic:

Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self) 

Una vez dicho esto, yo prefiero que define un paso que va realmente a la forma de la conexión, lo llena, y inicia sesión. Es más lento, pero rara vez ejecuto mi conjunto completo de pruebas de integración manualmente, generalmente el servidor de integración continua se ocupa de eso.

+0

Sí. * Definitivamente * quiere que sus especificaciones de integración realmente utilicen el formulario de inicio de sesión. Ah, y deseche las especificaciones de integración: use Pepino en su lugar; es mucho más agradable. –

+3

Pepino solo es útil si sus clientes están escribiendo o al menos leyendo las características (deben ser, por supuesto). De lo contrario, solo está agregando otra capa. – PhilT

+2

No quiero usar el formulario de inicio de sesión cada vez; solo cuando se prueba el formulario de inicio de sesión. De lo contrario, prefiero no agregar tiempo extra a mis especificaciones para completar un paso que ya sé que funciona. – Wheeyls

5

he publicado una solución pepino aquí: Log-in through authlogic without having to fill in form every time

Para las pruebas de integración RSpec es similar.

En su spec_helper.rb:

require "authlogic/test_case" 
RSpec.configure do |config| 
    ... 
    config.include Authlogic::TestCase 
    ApplicationController.skip_before_filter :activate_authlogic 
    config.before(:each, :type => :request) do 
    activate_authlogic 
    UserSession.create(User.find_by_email!(email)) 
    end 
    ... 
end 

Obviamente, si su sitio no está Usuario Sólo es posible que desee mover las dos líneas en config.before en un bloque antes de su prueba específica para iniciar sesión en especificaciones. Si se va como está, puede eliminar la sesión con UserSession.find.destroy o, obviamente, seguir el enlace de desconexión (si esto tiene más sentido en su especificación).

0

Este trabajo para mí (Rails 3.2.1):

En spec_helper.rb

require 'authlogic/test_case' 
include Authlogic::TestCase 

En En mis controller_specs:

def valid_session                                         
    activate_authlogiC# run before tests are executed                                
    user = Factory(:user)                                        
    UserSession.create(user, true) #create an authlogic session                              
    @user = @controller.current_user                                     
    {}                                            
    end  
    # exemple of valid_session utilization in your test: 
    # valid_session 
    # user_id = @user.id 
    #  
    # or 
    # 
    # get :index, {}, valid_session                                     

Enjoy!

Cuestiones relacionadas