2009-08-05 19 views
10

Per la vita di me non capisco perché Authlogic non mi stia registrando in questo test di integrazione. Non ho avuto problemi con Authlogic che mi ha registrato in test funzionali usando questo codice. Secondo il rdocs authlogic (http://tinyurl.com/mb2fp2), la simulazione di uno stato di accesso è la stessa nei test di integrazione funzionali &, quindi sono abbastanza confuso. Ogni aiuto è molto apprezzato!Test di integrazione 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 

risposta

3

Sulla base del codice nel metodo user_sessions_controllercreate, che prende un hash delle credenziali di accesso, sono stato in grado di farlo funzionare come questo nel mio test di integrazione:

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

ma non con:

UserSession.create(@user) 
+1

grazie. da questa riga in rdoc: UserSession.create (utenti (: chiunque)) ho presupposto che potrei passare un obj @user. apprezzare l'aiuto! – kareem

+1

hmm secondo questo: http://rdoc.info/rdoc/binarylogic/authlogic/blob/73c4cccb38189f0e52e1e362992dfb9db7d1206f/Authlogic/Session/UnauthorizedRecord.html dovrei essere in grado di fare UserSession.create (@user) e farlo funzionare ... wtf. – kareem

-3

Dai un'occhiata allo rdoc.

+0

thx ... ho collegato al rdoc nel mio post originale e penso di seguire ciò che è lì dentro. è per questo che sto postando - perchè non sto ottenendo il risultato che mi aspetto :) – kareem

+0

Hmmm. Il mio errore non l'ho visto. Puoi votare giù. Tuttavia non risolverà il tuo problema. – Waseem

+0

Ok, è piuttosto divertente ma sto affrontando lo stesso problema. :) l'hai risolto? – Waseem

2

ho scoperto che per i test di integrazione ho bisogno di effettuare il login tramite un post:

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

Questo imposta la sessione correttamente, mentre il metodo sopra menzionato funziona solo per me nei test funzionali.

4

Sto anche utilizzando Authlogic con Shoulda (ma con factory_girl in alto).

miei test functionnal assomigliano:

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 

In realtà, è possibile passare un utente valido per UserSession, è nel rdoc anche. Si dovrebbe anche evitare di chiamare activate_authlogic in ciascuna prova regolatore:

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ì, ho trovato questa settimana che con RSpec: in specifiche funzionali di simulare il login bene w/UserSession.create(@user). Ma se lo provi in ​​una specifica di integrazione non funziona. Per accedere dalle specifiche di integrazione ho scoperto che dovevo guidare i moduli (con webrat) che sarebbe chiaramente un problema per cose come Facebook e OpenID.

0

per le persone che trovano questo post in Google e la giustizia Maggiore - è necessario impostare persitence_token attributo nel modello User. Per esempio. puoi chiamare @user.reset_persistence_token! e tutto inizia a funzionare. :)

0

ho avuto lo stesso problema e ho potuto risolvere il problema accedendo manualmente (come altri hanno già risposto)

Inoltre ho dovuto risolvere il mio dominio biscotto:

Rails usa www.example.com per i suoi test e poiché ho impostato il dominio dei cookie su un valore diverso nel mio application.rb (via config.cookie_domain) il cookie di sessione creato dopo il login non era accessibile dalle richieste successive.

Dopo aver impostato il dominio dei cookie corretto, tutto ha funzionato di nuovo.

2

Non riuscivo a farlo funzionare con la risposta accettata, ma era vicino. Ho dovuto aggiungere il punto esclamativo alla fine della funzione:

UserSession.create!(@user) 

Si sta lavorando con Ruby v3.2.18 e Authlogic v3.4.2. Grazie per avermi indicato nella giusta direzione.

+0

Sto usando le stesse versioni di te, e questo è quello che ottengo in irb: (rdb: 1) UserSession.create (User.find (25)) # " "}> (rdb: 1) UserSession.create (User.find (25)). Save true chiaramente qualcos'altro deve interferire con il modello utente/sessione – prusswan

+0

Per favore prova di nuovo usando il punto esclamativo (!) Nella funzione . – ZombieBsAs

+0

Funziona perfettamente con i miei controller, non l'ho testato sulla console di rails. – ZombieBsAs

Problemi correlati