W niektórych z moich kontrolerów mam filtr before_filter, który sprawdza, czy użytkownik jest zalogowany? dla działań CRUD.Testowanie funkcjonalne Authlogic?
environment.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
Ale teraz moje testy funkcjonalne niepowodzeniem, ponieważ jego Przekierowanie do korzenia. Potrzebuję więc sposobu na symulację, że sesja została utworzona, ale nic, co próbowałem, nie zadziałało. Herezje co mam teraz i testy dość dużo go zignorować:
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
jestem brakuje czegoś?
Naprawdę zachęcam do odejścia od urządzeń do testowania, jeśli masz aplikację, która nie jest już od nich zależna. Są trudne do utrzymania i naprawdę frustrujące. Sprawdź railscast, Factories not Fixtures. – nitecoder
Tworząc takiego użytkownika, nie testujesz, że odpowiednie kontrole są wywoływane w twoim kontrolerze (np. Musisz się zalogować, być administratorem itp.). Lepiej kpić z oczekiwanych metod, aby upewnić się, że zostaną wywołane, np. dla Mocha: mock (@controller) .expects (: current_user) .returns (@user) –