2009-08-05 13 views
10

Dla mojego życia nie rozumiem, dlaczego Authlogic nie rejestruje mnie w tym teście integracji. Nie miałem żadnych problemów z/Authlogic logując mnie w testach funkcjonalnych za pomocą tego kodu. Według authlogic rdocs (http://tinyurl.com/mb2fp2), symulowanie stanu zalogowania jest takie samo w testach integracji funkcjonalnej &, więc jestem całkiem zdezorientowany. każda pomoc jest doceniana!Testy integracyjne z 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 

Odpowiedz

3

podstawie kodu w metodzie user_sessions_controllercreate, który odbywa hash poświadczeń logowania, udało mi się, aby to działało jak to w moim teście integracji:

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

ale nie z:

UserSession.create(@user) 
+1

dzięki. z tej linii w dokumencie rdoc: UserSession.create (użytkownicy (: kogo)) Zakładam, że mogę przekazać @user obj. doceń pomoc! – kareem

+1

hmm według tego: http://rdoc.info/rdoc/binarylogic/authlogic/blob/73c4cccb38189f0e52e1e362992dfb9db7d1206f/Authlogic/Session/UnauthorizedRecord.html byłbym w stanie zrobić UserSession.create (@user) i to działa ... wtf. – kareem

-3

Spójrz na rdoc.

+0

thx ... Połączyłem się z rdoc w moim oryginalnym wpisie i myślę, że śledzę to, co tam jest. dlatego zamieszczam - bo nie osiągam rezultatu, którego oczekuję :) – kareem

+0

Hmmm. Mój błąd, którego nie widziałem. Możesz głosować w dół. To jednak nie rozwiąże problemu. – Waseem

+0

OK, to dość zabawne, ale mam do czynienia z tym samym problemem. :) Czy to rozwiązałeś? – Waseem

2

Odkryłam, że do testów integracyjnych muszę się zalogować poprzez post:

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

Służy to do prawidłowego ustawienia sesji, podczas gdy powyższa metoda działa tylko dla mnie w testach funkcjonalnych.

4

Używam również Authlogic with Shoulda (ale z factory_girl na górze).

Moi functionnal testy wyglądać następująco:

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 

Właściwie można przekazać ważną użytkownikowi UserSession, to w rdoc również. Należy również unikać wywoływania activate_authlogic w każdym teście kontrolera:

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

Tak, uważam, że w tym tygodniu z RSpec: w specyfikacji funkcjonalnych symulować zalogować się dobrze w/UserSession.create(@user). Ale jeśli spróbujesz tego w specyfikacji integracji, to nie działa. W celu zalogowania się ze specyfikacji integracji, stwierdziłem, że muszę prowadzić formularze (webrat), co z pewnością będzie problemem dla takich rzeczy, jak Facebook i logowanie OpenID.

0

dla ludzi, którzy ten post w Google i większej sprawiedliwości - trzeba ustawić persitence_token atrybut w modelu użytkownika. Na przykład. możesz zadzwonić pod numer @user.reset_persistence_token! i wszystko zaczyna działać. :)

0

miałem ten sam problem i nie mogłem go naprawić poprzez ręczne zalogowaniu (jak inni już odpowiedział)

Dodatkowo musiałem naprawić moją domenę cookies:

Szyny używa www.example.com dla jego testy i od kiedy ustawiłem domenę plików cookie na inną wartość w moim application.rb (via config.cookie_domain), plik cookie sesji utworzony po zalogowaniu nie był dostępny z kolejnych żądań.

Po ustawieniu prawidłowej domeny pliku cookie wszystko działało ponownie.

2

Nie mogłem pracować z zaakceptowaną odpowiedzią, ale było blisko. Musiałem dodać znak wykrzyknika do końca funkcji:

UserSession.create!(@user) 

To działa z Ruby v3.2.18 i Authlogic v3.4.2. Dzięki za wskazanie mi w dobrym kierunku.

+0

Używam tych samych wersji co ty, i to jest to, co dostaję w irb: (rdb: 1) UserSession.create (User.find (25)) # " "}> (rdb: 1) UserSession.create (User.find (25)) .pisz prawda, że ​​coś innego musi ingerować w model użytkownika/sesji – prusswan

+0

Proszę ponownie przetestować za pomocą znaku wykrzyknika (!) W funkcji . – ZombieBsAs

+0

Działa to dobrze na moich kontrolerach, nie testowałem go na konsoli szyn. – ZombieBsAs

Powiązane problemy