2010-10-07 5 views
4

Je crée un contrôleur d'enregistrement personnalisé et je veux le tester avec rspec.RSpec-2 et Devise

Je l'ai essayé avec un test très simple:

it "creates a new parent" do 
    Parent.should receive(:new) 
    post :create 
end 

mais je reçois cette exception:

Failures: 
    1) Parent::RegistrationsController POST create creates a new parent 
    Failure/Error: post :create, { :commit => "Daftar", 
    uncaught throw `warden' 
    # /home/starqle/.rvm/gems/ree-1.8.7-2010.02/gems/devise-1.1.3/lib/devise/hooks/timeoutable.rb:16:in `throw' 
    # /home/starqle/.rvm/gems/ree-1.8.7-2010.02/gems/devise-1.1.3/lib/devise/hooks/timeoutable.rb:16 

J'ai déjà mis cette ligne dans mon test:

describe Parent::RegistrationsController do 
    include Devise::TestHelpers 
end 

J'ai également déjà mis cette ligne:

request.env["devise_mapping"] = Devise.mappings[:parent] 

Quelqu'un at-il des idées pour résoudre ce problème?

+0

Oh, et encore une chose .. Il ne se passe que lorsque j'utilise la méthode sign_in au sein de mon contrôleur personnalisé .. – giosakti

Répondre

5

Ma réponse précédente est un peu confuse. Pardon.

Réponse mise à jour: la cause principale est que l'utilisateur n'est pas "confirmé" avant "se connecter".

@user.confirm! 
sign_in @user 

alors tout va bien.

+0

merci, un moyen brut mais ça marche bien pour le moment. – giosakti

+0

Oui, ce n'est pas une solution élégante. Je ne sais pas si les gars de Rails3 ont rencontré ce problème. Cependant je suis sûr qu'il y a 2 méthodes sign_in dans l'esprit: 1. sign_in (Devise :: Controllers :: Helpers) 2. sign_in (Devise :: TestHelpers) ils ont utilisé une stratégie d'implémentation différente, et seulement la 2ème méthode fonctionne . Je ne sais pas s'il s'agit d'un bug, à moins que j'aie assez de temps pour lire le code source de "warden". c'est ma première réponse acceptée sur StackOverflow, merci! –

+3

Il semble que j'ai trouvé la cause première: le @user devrait d'abord être confirmé avant de signer. @ user.confirm! sign_in (@user) –

3

Je suis plus fraîche en rubis. J'utilise des rails 3 avec un appareil et une usine fille.

Je cherchais comment authentifier l'utilisateur pour rspec.

J'ai été bloqué à before_filter: authenticate_user! dans le contrôleur.

Enfin j'ai eu solution (grâce à Siwei Shen) Ce que je fais est

  1. comprennent TestHelpers dans spec/spec_helper.rb

2.

require 'spec_helper' 

describe StudentsController do 
    before(:each) do 
    @user = Factory.create(:user) #:user from factory girl with admin privilages 
    @request.env['devise.mapping'] = :user 
    @user.confirm! 
    sign_in @user 
    end 

    it "can get index of student" do 
    get :index 
    response.should be_suclogin_as @user 
    end 

    it "can create student" do 
    #in student model : validates :name, :presence=> true 
    post :create, :student => {name => "student1" } 
    answer = Student.find_by_name("student1") 
    answer.name.should == "student1" 
    end 
end 
Questions connexes