2010-02-28 6 views
4

Je suis nouveau sur les rails et j'essaie de tester un contrôleur avec rspec. Mon premier test est quand l'action de show est invoquée, elle devrait rechercher une catégorie par l'URL.Contrôleur de rails de test avec rspec

Le problème est quand j'ajouter le code de stubbing, je reçois l'erreur suivante:

méthode non définie `find » pour #

mon test ressemble à ceci:

require 'spec_helper' 

describe CategoriesController do 
    describe "GET /category-name/" do 
     before(:each) do 
      @category = mock_model(Category) 
      Category.stub!(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category) 
     end 

     it "should find the category by url" do 
      controller.show 
      Category.should_receive(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category) 
     end 
    end 
end 

Répondre

10

Votre appel à la demande devrait être après should_receive. C'est une chose tendue. Donc, il se lit comme ceci, "Catégorie devrait recevoir quelque chose, quand cela se produit". "Cela arrive" fait référence à la demande.

it "should find the category by url" do 
    Category.should_receive(:find).with... 
    get "show", { your params, if you're sending some in } 
end 

, vous voulez aussi aller dans le sens d'une requête contre l'appel de la méthode du contrôleur lui-même, pour ce test particulier au moins.

Alors

post "action_name" 
get "action_name" 
update "action_name" 
delete "action_name" 

au lieu de

controller.action_name 
+0

Ah, très bien, merci. Maintenant le talonnage fonctionne correctement mais si j'essaie d'utiliser get "show" j'obtiens une erreur en disant: Aucune route ne correspond {: action => "show",: controller => "categories"} mais retourne les routes: root/{: controller => "categories",: action => "index"} /: url {: controller => "catégories",: action => "show"} –

+0

nevermind, je l'ai trouvé. Je devais passer: url pour obtenir: montrer c'est pourquoi il n'a pas trouvé mon itinéraire. Merci de votre aide –

Questions connexes