In alcuni dei miei controller ho un before_filter che controlla se un utente ha effettuato l'accesso? per azioni CRUD.Test funzionali 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
Ma ora il mio test non hanno dato esito perché la sua reindirizzamento alla radice. Quindi ho bisogno di un modo per simulare che sia stata creata una sessione, ma non ho funzionato. Heres quello che ho in questo momento e le prove più o meno finta di niente:
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
Mi sto perdendo qualcosa?
Ti consiglio davvero di allontanarti dai proiettori per testare se hai un'app che non dipende già da loro. Sono difficili da mantenere e semplicemente frustranti. Dai un'occhiata al railscast, Factories not Fixtures. – nitecoder
Creando un utente come quello che non stai testando che i controlli appropriati sono chiamati nel tuo controller (ad esempio, devi essere registrato, deve essere un amministratore, ecc.). È meglio prendere in giro i metodi previsti per assicurarsi che vengano chiamati, ad es. per Mocha: mock (@controller) .expects (: current_user) .returns (@user) –