2010-09-03 3 views
0

J'ai essayé de plonger dans RSpec 2 mais ses spécifications de contrôleur générées automatiquement ne fonctionnent pas pour n'importe quelle version de RSpec 2 avec n'importe quelle version de Ruby ou n'importe quelle version de Rails. Peut-être qu'il me manque quelque chose d'évident?Quelqu'un peut-il me décrire ce que RSpec 2 fait dans ce domaine?

def mock_category(stubs={}) 
    @mock_category ||= mock_model(Category, stubs).as_null_object 
end 

describe "GET show" do 
    it "assigns the requested category as @category" do 
    Category.stub(:find).with("37") { mock_category } 
    get :show, :id => "37" 
    assigns(:category).should be(mock_category) 
    end 
end 

C'est généré automatiquement à partir rails g scaffold Category

RSpec retourne ceci:

Failures: 
    1) CategoriesController GET show assigns the requested category as @category 
    Failure/Error: assigns(:category).should be(mock_category) 
    expected Category_1002, got nil 
    # ./spec/controllers/categories_controller_spec.rb:21 
    # /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject' 

Pourquoi cette maquette/stub retour nil?

Mise à jour

Ceci est de la méthode show de mon contrôleur:

def show 
    @category = Category.find(params[:id]) 

    respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @category } 
    end 
end 

Merci!

+0

Je ne sais pas ce que '.as_null_object' fait ou pourquoi c'est là, mais il semble que ce ne devrait pas être là. Essayez de le supprimer. –

+0

Pouvez-vous poster le contenu de la méthode d'index? – zetetic

+0

@zetetic, je suis un idiot, j'ai posté le mauvais exemple. Celui ci-dessus est seulement légèrement différent. Y a-t-il une méthode que vous aimeriez voir? – Trip

Répondre

0

RSpec a de sérieux conflits entre Rails3 beta, et RSpec 2 beta.10 à Rails3, et RSpec 2 beta.20.

J'ai essayé de copier et coller les différences entre les échafaudages, mais j'ai complètement effacé la sitation en supprimant toutes les spécifications et en les régénérant. Désinstallation haml, et l'installation seulement haml-rails pour les rails 3.

Toutes les spécifications fonctionnent maintenant.

0

Hmm. Eh bien, si quelque chose ne va pas, je ne le vois pas. Peut-être que l'action show n'est pas atteinte du tout? Y a-t-il des instructions before_filter qui gênent?

Vous pouvez essayer d'ajouter des tests pour voir si l'affectation est atteinte. Comme

controller.should_receive(:show)

BTW .as_null_object dit la maquette d'ignorer les messages que vous ne Stub pas. Cela aide avec les objets qui dépendent de validations ou d'autres contraintes, que vous auriez autrement à extérioriser afin d'obtenir un objet que vous pouvez tester. Mais attention à ne pas ignorer les messages que vous devriez tester.

+0

Je pense que je l'ai déduit jusqu'à ce qu'il manque une partie fondamentale du générateur. Parce que je ne peux pas recréer le problème, je trouve que parce que le projet a été démarré avec Rails 3 beta, et le nouveau Rspec, que les générateurs entrent en conflit. Et je ne suis pas sûr de savoir comment supprimer les rspec du projet et les regénérer. – Trip

+1

Vous avez entendu le dicton, "ne faites jamais confiance à un junkie"? A cela j'ajoute: "ne fais jamais confiance à un générateur" :) – zetetic