2009-08-05 14 views
10

Por el resto de mi vida, no entiendo por qué Authlogic no me está iniciando sesión en esta prueba de integración. No he tenido ningún problema con Authlogic registrándome en pruebas funcionales usando este código. De acuerdo con el rdocs authlogic (http://tinyurl.com/mb2fp2), simular un estado de inicio de sesión es el mismo en las pruebas de integración funcional &, por lo que estoy bastante confundido. ¡Cualquier ayuda es muy apreciada!Pruebas de integración con Authlogic?

class TipsController < ApplicationController 
    before_filter :require_user, :only => [:destroy, :undelete] 
    def destroy 
    @tip = Tip.find(params[:id]) 

    if can_delete?(@tip) 

     @tip.destroy 

     set_flash("good", "Tip deleted. <a href=\"#{undelete_tip_url(@tip.id)}\">Undo?</a>") 
     respond_to do |format| 
     format.html { redirect_to city_path(@tip.city)} 
     end 
    else 
     set_flash("bad", "Seems like you can't delete this tip, sorry.") 
     respond_to do |format| 
     format.html { render :action => "show", :id => @tip} 
     end 
    end 
    end 
end 


class DeleteTipAndRender < ActionController::IntegrationTest 
    context "log user in" do 
    setup do 
     @user = create_user 
     @tip = create_tip 
    end 

    context "delete tip" do 
     setup do 
     activate_authlogic 
     UserSession.create(@user) 
     @us = UserSession.find 
     post "/tips/destroy", :id => @tip.id 
     end 

     should_redirect_to("city_path(@tip.city)"){city_path(@tip.city)} 
    end 
    end 
end 

Respuesta

3

Basado en el código en el método user_sessions_controllercreate, que tiene un hash de las credenciales de inicio de sesión, yo era capaz de hacer que funcione como este en mi prueba de integración:

UserSession.create(:email => '[email protected]', :password => 'password') 

pero no con:

UserSession.create(@user) 
+1

gracias. de esta línea en el rdoc: UserSession.create (users (: whomever)) supuse que podría pasar un @user obj. ¡Aprecia la ayuda! – kareem

+1

hmm acuerdo con esto: http://rdoc.info/rdoc/binarylogic/authlogic/blob/73c4cccb38189f0e52e1e362992dfb9db7d1206f/Authlogic/Session/UnauthorizedRecord.html que debería ser capaz de hacer UserSession.create (@user) y haz que funcione ... wtf. – kareem

-3

Eche un vistazo a rdoc.

+0

thx ... me vinculé al rdoc en mi publicación original y creo que estoy siguiendo lo que hay allí. que es por qué estoy publicando - porque no estoy obteniendo el resultado que espero :) – kareem

+0

Hmmm. Mi error, no lo vi. Puedes votarlo abajo. Sin embargo, no resolverá tu problema. – Waseem

+0

Ok, es bastante divertido, pero estoy enfrentando el mismo problema. :) ¿Lo resolvió? – Waseem

2

he descubierto que para las pruebas de integración necesito iniciar sesión a través de un mensaje:

setup do 
    post 'user_session', :user_session => {:email => '[email protected]', :password => 'password'} 
end 

Esto configura la sesión correctamente, mientras que el método mencionado anteriormente solo funciona para mí en pruebas funcionales.

4

También estoy usando Authlogic con Shoulda (pero con factory_girl en la parte superior).

Mis pruebas functionnal ven como:

require 'test_helper' 

class LoansControllerTest < ActionController::TestCase 
[...] 

    context "as a signed-in user, with an active loan" do 
    setup do 
     @user = Factory(:user) 
     @user_session = UserSession.create(@user) 
     @loan = Factory(:loan, :ownership => Factory(:ownership, :user => @user)) 
    end 

    context "on GET to :index" do 
     setup do 
     get :index 
     end 

     should_respond_with_success 
    end 
    end 
end 

En realidad, se puede pasar a un usuario válido UserSession, que está en el rdoc también. También debe evitar llamar activate_authlogic en cada prueba del controlador:

ENV["RAILS_ENV"] = "test" 
require File.expand_path(File.dirname(__FILE__) + "/../config/environment") 
require 'test_help' 

class ActiveSupport::TestCase 
    [...] 
    # Add more helper methods to be used by all tests here... 
    include Authlogic::TestCase 

    def setup 
    activate_authlogic 
    end 
end 
2

Sí, me encontré esta semana que con rspec: en especificaciones funcionales simular ingrese bien w/UserSession.create(@user). Pero si lo prueba en una especificación de integración, no funciona. Para iniciar sesión desde las especificaciones de integración encontré que tenía que manejar los formularios (con webrat) lo que claramente será un problema para cosas como Facebook y OpenID inicie sesión.

0

para las personas que desean que este blog en Google y el Justicia Mayor - usted tiene que fijar persitence_token atributo en el modelo de usuario. P.ej. puede llamar al @user.reset_persistence_token! y todo comienza a funcionar. :)

0

tuve el mismo problema y pude solucionarlo ingresando manualmente (como ya se ha contestado)

Además tuve que arreglar mi dominio galletas:

Rails utiliza para www.example.com sus pruebas y desde que establecí el dominio de la cookie a un valor diferente en mi application.rb (a través de config.cookie_domain) la cookie de sesión creada después del inicio de sesión no era accesible desde las solicitudes posteriores.

Después de configurar el dominio de cookies correcto, todo funcionó de nuevo.

2

No pude hacerlo funcionar con la respuesta aceptada, pero estaba cerca. He tenido que añadir el signo de exclamación al final de la función:

UserSession.create!(@user) 

Está funcionando con Ruby v3.2.18 y v3.4.2 Authlogic. Gracias por apuntarme en la dirección correcta.

+0

estoy usando las mismas versiones como lo hace, y esto es lo que me pasa en el IRB: (RDB: 1) UserSession.create (User.find (25)) # " "}> (rdb: 1) UserSession.create (User.find (25)). Save true claramente algo más debe estar interfiriendo con el usuario/modelo de sesión – prusswan

+0

Por favor, vuelva a probar usando el signo de exclamación (!) En la función . – ZombieBsAs

+0

Funciona bien en mis controladores, no lo probé en la consola de rieles. – ZombieBsAs

Cuestiones relacionadas