2009-08-05 1 views
10

Для жизни меня не понимаю, почему Authlogic не регистрирует меня в этом тесте интеграции. У меня не было никаких проблем с Authlogic, регистрирующим меня в функциональных тестах с использованием этого кода. Согласно authlogic rdocs (http://tinyurl.com/mb2fp2), имитация состояния входа в систему совпадает с функциональными & интеграционными тестами, поэтому я довольно смущен. Любая помощь высоко ценится!Интеграция с 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 

ответ

3

на основе коды в user_sessions_controllercreate методе, который принимает хэш учетных данных для входа, я был в состоянии сделать его работу, как это в моем интеграционном тесте:

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

но не с:

UserSession.create(@user) 
+1

спасибо. из этой строки в rdoc: UserSession.create (пользователи (: whewver)) Я предположил, что могу передать объект @user obj. оцените помощь! – kareem

+1

хмм в соответствии с этим: http://rdoc.info/rdoc/binarylogic/authlogic/blob/73c4cccb38189f0e52e1e362992dfb9db7d1206f/Authlogic/Session/UnauthorizedRecord.html я должен быть в состоянии сделать UserSession.create (@user) и имейте это работать ... wtf. – kareem

-3

Посмотрите на rdoc.

+0

thx ... я связан с rdoc в своем оригинальном посте и думаю, что я слежу за тем, что там. вот почему я публикую - cuz, я не получаю результат, которого я ожидаю :) – kareem

+0

Хммм. Моя ошибка я этого не видел. Вы можете проголосовать. Однако это не решит вашу проблему. – Waseem

+0

Хорошо, это довольно забавно, но я столкнулся с той же проблемой. :) Вы решили его решить? – Waseem

2

Я обнаружил, что для интеграции тестов мне нужно войти в систему с помощью поста:

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

Это правильно устанавливает сеанс, а метод, упомянутый выше, работает только для меня в функциональных тестах.

4

Я также использую Authlogic с Shoulda (но с factory_girl сверху).

Мои тесты Функциональное выглядеть следующим образом:

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 

На самом деле, вы можете передать действительный пользователю UserSession, это в RDoc также. Вы должны также избегать вызова activate_authlogic в каждом тесте контроллера:

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

Да, я нашел на этой неделе, что с RSpec: в функциональной спецификации имитации войти только штрафом ж/UserSession.create(@user). Но если вы попробуете это в спецификации интеграции, это не сработает. Чтобы войти в систему из спецификаций интеграции, я обнаружил, что мне нужно было управлять формами (с webrat), что явно будет проблемой для таких вещей, как Facebook и OpenID.

0

для людей, которые находят этот пост в Google и большей справедливости - вы должны установить persitence_token атрибут в модели пользователя. Например. вы можете позвонить @user.reset_persistence_token!, и все начнет работать. :)

0

У меня была такая же проблема, и я мог исправить ее вручную входа в систему (как и другие уже ответили)

Кроме того, я должен был исправить мой домен печенье:

Rails использует для www.example.com его тесты, и поскольку я установил для домена cookie другое значение в моем application.rb (через config.cookie_domain), cookie сеанса, созданный после входа в систему, не был доступен из последующих запросов.

После настройки правильного домена cookie все снова работало.

2

Я не мог заставить его работать с принятым ответом, но был близок. Я должен добавить знак восклицания в конце функции:

UserSession.create!(@user) 

Он работает с Руби v3.2.18 и Authlogic v3.4.2. Спасибо, что указала мне в правильном направлении.

+0

Я использую ту же версию, как вы делаете, и это то, что я получаю в IRB: (RDB: 1) UserSession.create (User.find (25)) # » "}> (rdb: 1) UserSession.create (User.find (25)). Save true, что-то другое должно мешать модели пользователя/сеанса – prusswan

+0

Повторите попытку, используя восклицательный знак (!) В функции , – ZombieBsAs

+0

Он отлично работает на моих контроллерах, я не тестировал его на консоли рельсов. – ZombieBsAs

 Смежные вопросы

  • Нет связанных вопросов^_^