2009-11-16 10 views
5

Ho provato a utilizzare reset_session nel mio codice di test ma non si lamenta di aver trovato alcun metodo. Ho anche cercato di utilizzare alcuni dei metodi di autenticazione Ive scritto nel mio test e hanno prodotto errori di metodo troppo (sono nel mio application_controller)In Rails perché non posso usare reset_session o uno dei miei metodi in application_controller all'interno dei miei test?

Qualcuno può aiutare a spiegare se

a) questo è un problema vissuta da tutti e non solo a me b) una soluzione

*** EDIT - Heres po 'di codice ********

dal mio Controller App

class ApplicationController < ActionController::Base 
    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details 
    include SpreedyTools 
    # Scrub sensitive parameters from your log 
    # filter_parameter_logging :password 
    protected 

    def logged_in_user? 
    @logged_in_user = User.find(session[:user]) if session[:user] 
    end 

    def logged_in_user=user 
    if !user.nil? 
     session[:user] = user 
     @logged_in_user = user 
    end 
    end 

    def logged_in_user 
    if logged_in_user? 
     return @logged_in_user 
    end 
    end 

    #checks to see if there is a user logged in, if not redirects to login page. 
    def login_required 
    unless logged_in_user? 
     flash[:error] = "You`ll need login first to access your account. Enter your details and we'll take you where you need to be." 
     redirect_to :controller => 'account', :action => 'login' 
     return 
    end 
    end 
end 

dal mio test funzionale

require 'test_helper' 
require 'application_controller' 

class DashboardControllerTest < ActionController::TestCase 
    # Replace this with your real tests. 
    setup :login_adam 
    fixtures :users 

    test "welcome page" do 
    get :welcome 
    assert_response :success 
    end 

    test "reset session works in my tests" do 
    reset_session 
    end 

    test "i can call my methods in application controller" do 
    logged_in_user = logged_in_user? 
    end 

end 

e gli errori quando corro di prova: funzionali

/usr/bin/ruby1.8 -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/functional/store_controller_test.rb" "test/functional/user_controller_test.rb" "test/functional/dashboard_controller_test.rb" "test/functional/account_controller_test.rb" 
Loaded suite /usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader 
Started 
.....E..E.............. 
Finished in 1.63359 seconds. 

    1) Error: 
test_i_can_call_my_methods_in_application_controller(DashboardControllerTest): 
NoMethodError: undefined method `logged_in_user?' for #<DashboardControllerTest:0x7f18e162cd88> 
    /test/functional/dashboard_controller_test.rb:31:in `test_i_can_call_my_methods_in_application_controller' 

    2) Error: 
test_reset_session_works_in_my_tests(DashboardControllerTest): 
NameError: undefined local variable or method `reset_session' for #<DashboardControllerTest:0x7f18e162cc48> 
    /test/functional/dashboard_controller_test.rb:27:in `test_reset_session_works_in_my_tests' 

23 tests, 53 assertions, 0 failures, 2 errors 
rake aborted! 
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test" "/usr/lib/ru...] 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:995:in `sh' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1010:in `call' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1010:in `sh' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1094:in `sh' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1029:in `ruby' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1094:in `ruby' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/testtask.rb:117:in `define' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1112:in `verbose' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/testtask.rb:102:in `define' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain' 
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31 
/usr/bin/rake:19:in `load' 
/usr/bin/rake:19 
+0

Puoi pubblicare il tuo codice di prova? –

+0

Uso reset_session nel mio progetto e funziona come un incantesimo. C'è una traccia di stack che puoi pubblicare? Prova anche a postare un codice di esempio per consentire a qualcuno di dare un'occhiata e correggere se necessario. –

+0

ciao ragazzi grazie per le risposte. Ho pubblicato il mio codice di prova più gli errori. – robodisco

risposta

0

dovete esplicitamente definire i metodi che si desidera utilizzare nelle viste/altri controller come metodi di supporto. quindi per tutti coloro che avrebbe dovuto specificare

helper_method :logged_in_user? 
helper_method :login_required 

ecc e questo permetterebbe di accedere ad essi in altri controller/vista

1

Credo di aver trovato la risposta a questa:

@request.reset_session 
+0

Potresti per favore [modificare] in una spiegazione del perché questo codice risponde alla domanda? Le risposte al solo codice sono [scoraggiate] (http://meta.stackexchange.com/q/148272/274165), perché non insegnano la soluzione. –

Problemi correlati