Функциональное тестирование Authlogic? - PullRequest
5 голосов
/ 16 июня 2009

В некоторых из моих контроллеров у меня есть before_filter, который проверяет, вошел ли пользователь в систему? для действий CRUD.

application.rb

def logged_in?
  unless current_user
    redirect_to root_path
  end
end

private
def current_user_session
  return @current_user_session if defined?(@current_user_session)
  @current_user_session = UserSession.find
end

def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.record
end

Но теперь мои функциональные тесты не пройдены, потому что они перенаправлены в root. Поэтому мне нужен способ имитировать, что сеанс создан, но ничего из того, что я пробовал, не сработало. Вот то, что у меня есть сейчас, и тесты в значительной степени игнорируют это:

test_helper.rb

class ActionController::TestCase
  setup :activate_authlogic
end

posts_controller_test.rb

class PostsControllerTest < ActionController::TestCase
  setup do
    UserSession.create(:username => "dmix", :password => "12345")
  end

  test "should get new" do  
    get :new
    assert_response :success
  end

Я что-то упустил?

Ответы [ 5 ]

5 голосов
/ 16 июня 2009

Вы должны передать объект ActiveRecord в UserSession.create

Что-то вроде:

u = users(:dmix)
UserSession.create(u)
4 голосов
/ 16 июня 2009

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/TestCase

Сначала вам нужно активировать AuthLogic, чтобы использовать его в своих тестах.

setup :activate_authlogic

Тогда вам нужна действительная запись пользователя, как указал Антон Миронов.

3 голосов
/ 16 июня 2009

Все, что я делаю в своих тестах rspec для моего контроллера, это создаю пользователя с машинистом, а затем назначаю этого пользователя current_user.

def login_user(options = {})
  user = User.make(options)
  @controller.stub!(:current_user).and_return(user)
end

и это присоединяет current_user к контроллеру, что будет означать, что ваш logged_in? Метод будет работать в ваших тестах.

Вам, очевидно, придется адаптировать это для работы в Test :: Unit и без Machinist, если вы его не используете, как я использую rspec, но я уверен, что принцип тот же.

1 голос
/ 29 октября 2010

Поместите это в test_helper.rb, если вы хотите, чтобы все ваши тесты настраивали Authlogic:

class ActionController::TestCase
  def self.inherited(subclass)
    subclass.instance_eval do
      setup :activate_authlogic
    end
  end
end
0 голосов
/ 01 декабря 2010

Здесь - ссылка на тестовую документацию AuthLogic. Это важный, но немного скрытый (та же ссылка, что и Симона, но его больше не работает).

На этой странице содержится вся информация, необходимая для тестирования приложения с использованием AuthLogic для аутентификации.

Кроме того, как предположил railsninja, используйте фабрики, а не оборудование. Взгляните на factory_girl и машинист ; выбери свой яд, они оба хороши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...