2010-09-04 3 views
2

Je n'arrive pas à créer des spécifications pour mes vues et demandes. Certains de mes contrôleurs utilisent named_scope, comme ceci:Rails 3 avec Rspec2 et authlogic: Impossible de spécifier les demandes et les vues

#projects_controller.rb 
@projects = Project.with_user(current_user) 

## project.rb: 
scope :with_user, lambda {|u| {:joins => :client, :conditions => {:clients => {:user_id => u.id} } }} 

mais les spécifications suivante donne une erreur:

Spec:

describe "GET /projects" do 
    it "works! (now write some real specs)" do 
     get projects_path 
    end 

Erreur:

6) Projects GET /projects works! (now write some real specs) 
    Failure/Error: get projects_path 
    Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 
    # ./app/models/project.rb:9:in `block in <class:Project>' 
    # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/named_scope.rb:95:in `call' 
    # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/named_scope.rb:95:in `block in scope' 
     # ./app/controllers/projects_controller.rb:4:in `index' 

J'ai une erreur similaire au sein de mes specs vue:

4) projects/show.haml renders attributes in <p> 
    Failure/Error: render 
    undefined method `name' for nil:NilClass 
    # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0.rc/lib/active_support/whiny_nil.rb:48:in `method_missing' 
    # ./app/views/projects/show.haml:4:in `_app_views_projects_show_haml___1706343108022772066_34134280__4548622860215298334' 

Il me semble que je dois bouchonner la méthode current_user défini par authlogic afin de pouvoir avancer. Comment puis-je spécifier des vues et des demandes? Merci

+0

commuté pour concevoir ... –

Répondre

0

Réduire current_user peut être une expérience frustrante. Vous pouvez obtenir la fonctionnalité de session nécessaire dans vos spécifications en créant un utilisateur et en vous connectant, comme recommandé dans les documents Authlogic. Par exemple.

include Authlogic::TestCase 
activate_authlogic 
@user = Factory.create(:user) 
UserSession.create(:user) 

Déconnexion:

session = UserSession.find 
session.destroy if session 
+2

je peux l'obtenir pour travailler sur les spécifications du contrôleur, mais pas sur la vue et demander les spécifications ... –

+0

Vous définissez 'affects' dans les spécifications de votre vue? – zetetic

+0

J'ai le même problème. @zetetic, de quoi parlez-vous? L'utilisateur actuel? – Paul

3

Je viens d'utiliser avec succès la solution ici: http://spacevatican.org/2011/12/5/request-specs-and-authlogic

before(:each) do 
    activate_authlogic 
    @user = FactoryGirl.create(:user) 
    UserSession.create @user 
    cookies['user_credentials'] = "#{@user.persistence_token}::#@user.send(@user.class.primary_key)}" 
end 
+0

Travaillé pour moi aussi, devrait être la réponse acceptée. – miccet

Questions connexes