In einigen meiner Controller habe ich einen before_filter, der prüft, ob ein Benutzer angemeldet ist? für CRUD-Aktionen.Funktionsprüfung 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
Aber jetzt meine funktionellen Tests fehlschlagen, weil sein Umleiten zu root. Also brauche ich eine Möglichkeit zu simulieren, dass eine Sitzung erstellt wurde, aber nichts, was ich versucht habe, hat funktioniert. Heres, was ich jetzt habe und die Tests ziemlich ignorieren:
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
Bin ich etwas fehlt?
Ich ermutige Sie wirklich, von den Vorrichtungen zum Testen wegzugehen, wenn Sie eine App haben, die nicht bereits von ihnen abhängt. Sie sind schwer zu pflegen und frustrierend. Schauen Sie sich die Railscast, Fabriken nicht Fixtures. – nitecoder
Indem Sie einen solchen Benutzer erstellen, testen Sie nicht, ob die entsprechenden Prüfungen in Ihrem Controller aufgerufen werden (z. B. muss er eingeloggt sein, muss ein Administrator sein usw.). Es ist besser, die erwarteten Methoden zu verspotten, um sicherzustellen, dass sie aufgerufen werden, z. für Mocha: mock (@controller) .expects (: current_user) .returns (@user) –