2010-07-06 14 views
19

Dopo 3 anni di procrastinazione oggi è il giorno in cui inizio a testare le mie app Rails. Il mio primo passo è quello di correggere i test falliti nella mia app beta4 Rails 3.Esecuzione di test funzionali in Rails with Devise

I miei ultimi 3 test non riusciti hanno a che fare con la gemma di elaborazione e il suo utente authenticate_user! metodo in un before_filter nella parte superiore del mio controller.

Guadagnerai un grande karma aiutandomi con questo dato che mi consentirà di utilizzare la metodologia TDD da ora in poi.

Ecco l'errore che mi turba:

1) Error: 
test_should_get_accepted(ModerationControllerTest): 
NoMethodError: undefined method `authenticate!' for nil:NilClass 
    /test/functional/moderation_controller_test.rb:10:in `test_should_get_accepted' 

Devise dà solo test funzionali puntatori e aiutanti in questa pagina: http://github.com/plataformatec/devise ma io proprio non so come mettere questo in applicazione.

Potete per favore dare a questo test di noob alcune istruzioni dettagliate su come utilizzare questi helper?

risposta

50

Mi ci è voluto un po 'ma ho trovato la strada. Qui è per chiunque bloccati nello stesso punto:

Nella parte superiore del moderation_controller_test.rb, sotto la dichiarazione della classe, aggiungere questa riga:

include Devise::TestHelpers 

Ho 2 record nel mio apparecchio utente e io aggiunta questa riga all'interno di ciascun test in cui l'utente deve essere autorizzato a eseguire l'azione.

sign_in User.first 

Ovviamente è semplicissimo quando si sa come farlo.

+3

Ha creato altri errori per includere Devise :: TestHelpers nel file test_helper.rb. Secondo questa risposta dovrebbe essere incluso solo nei singoli file di test: http://stackoverflow.com/questions/2839328/testing-devise-with-shoulda Quindi ho modificato la tua risposta – vdaubry

+1

il problema non è con metterlo in test_helper.rb di per sé. Il problema è se non ha un ambito corretto - deve essere nella classe ActionController :: TestCase. Se è incluso nel blocco ActiveSupport :: TestCase in test_helper.rb, le cose diventano brutte. – jpgeek

7

Sono relativamente nuovo a Rails, quindi mi piacerebbe aggiungere un paio di cose che potrebbero non essere ovvie per altre persone nuove.

Per quanto riguarda il dispositivo dell'utente, dovessi definire uno, ma lasciarla vuota in modo che questo funzioni:

# in users.yml  
joe: {} 

Quando si utilizza l'helper concepire sign_in, è possibile accedere all'oggetto hash direttamente nel test:

# a test method in some_controller_test.rb 
sign_in users(:joe) 

Vedi http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures per ulteriori informazioni su Rails infissi.

18

Se si desidera che i collaboratori di prova Devise di essere a disposizione di tutti i test, è necessario racchiudere il includono menzionato da allesklar in fondo a test_helper.rb in una dichiarazione di classe come questo:

class ActionController::TestCase 
    include Devise::TestHelpers 
end 

Aggiornamento : 01.25.2017

... rotaie 5 posti una deprecazione AVVERTENZA & chiede di utilizzare ...

Devise::Test::ControllerHelpers

+1

Questa dovrebbe essere la risposta accettata – rndstr

0

Oltre al codice nei test_helpers.RB, ho aggiunto questo alla parte superiore del controller_test e ha funzionato per me:

require 'test_helper' 
1

Citando testualmente da https://github.com/plataformatec/devise:

Se stai usando RSpec, si può mettere il seguente all'interno di un file chiamato spec/support/devise.rb:

RSpec.configure do |config|

config.include Devise::TestHelpers, :type => :controller

end

È ora possibile utilizzare sign_in e sign_out nei test RSpec.