在我的一些控制器中,我有一個before_filter用來檢查用戶是否登錄?爲CRUD行動。功能測試Authlogic?
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
但現在我的功能測試失敗,因爲它重定向到根。所以我需要一種方法來模擬一個會話已經創建,但沒有我試過的工作。下面有什麼,我現在所擁有的,並測試幾乎忽略它:
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
我缺少的東西?
如果你有一個不依賴於它們的應用程序,我真的鼓勵你不要使用燈具進行測試。他們很難維持,真正令人沮喪。看看railscast,工廠沒有燈具。 – nitecoder 2009-06-16 22:13:49
通過創建一個這樣的用戶,您不會測試您的控制器中是否調用了相應的檢查程序(例如必須登錄,必須是管理員等)。最好嘲笑預期的方法以確保它們被呼叫,例如對於摩卡:模擬(@controller).expects(:current_user).returns(@user) – 2011-07-28 16:12:59