功能测试Authlogic?

dMi*_*Mix 5 ruby tdd ruby-on-rails

在我的一些控制器中,我有一个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
Run Code Online (Sandbox Code Playgroud)

但是现在我的功能测试失败了,因为它重定向到root.所以我需要一种方法来模拟会话已经创建,但我尝试过的任何东西都没有.这是我现在所拥有的,测试几乎忽略了它:

test_helper.rb中

class ActionController::TestCase
  setup :activate_authlogic
end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Ant*_*nov 5

您应该在UserSession.create中传递ActiveRecord对象

就像是:

u = users(:dmix)
UserSession.create(u)
Run Code Online (Sandbox Code Playgroud)

  • 如果你有一个不依赖它们的应用,我真的鼓励你离开灯具进行测试.他们很难维护,真的很令人沮丧.查看railscast,工厂不是固定装置. (3认同)