2011-09-23 5 views
0

je suis en train d'exécuter ce test:test du contrôleur Rspec échoue

it "render form to update an bundle with a specific id" do 
    bundle = mock_model(Bundle) 
    Bundle.stub!(:find).with("1") { bundle } 

    get :edit, :locale => "en", :id => 1 
    Bundle.should_receive(:find).with("1").and_return(bundle) 
end 

code à partir d'un contrôleur:

class BundlesController < ApplicationController 
    # GET /bundles 
    # GET /bundles.json 
    ..... 

    # GET /bundles/1/edit 
    def edit 
    @bundle = Bundle.find(params[:id]) 
    end 
    ..... 
end 

Mais test échoue avec le message:

BundlesController mise à jour Bundle rendu sous forme pour mettre à jour un paquet avec un ID spécifique Échec/Erreur: Bundle.should_receive (: find) .with ("1") .et_return (bundle) () .find ("1") prévu: 1 fois reçu: 0 fois # ./spec/controllers/bundles_controller_spec.rb:60:in `bloc (3 niveaux) dans '

Quelqu'un peut-il me aide? Merci!

+0

Rien ne prouve que le contrôleur possède réellement une action d'édition, ou que l'action d'édition a un appel à 'Bundle.find'. Montrez-nous plus de code, s'il vous plaît. –

+0

Ma conjecture: Utilisez une chaîne '" 1 "' au lieu d'un entier '1':': id => "1" '. – rdvdijk

Répondre

2

Il y a quelques problèmes ici, et peut-être plus que vous publiez plus de votre code. Tout d'abord, vous définissez des stubs et des attentes sur Bundle, puis vous affichez le code qui charge un Role à la place.

Deuxièmement, vous appelez #should_receive à la fin de votre test. Cette méthode définit une attente pour le code qui vient après dans votre test. À moins d'avoir un rappel caché que vous ne nous montrez pas, cela va toujours échouer. Inverser l'ordre.

Bundle.should_receive(:find).with("1").and_return(bundle) 
get :edit, :locale => "en", :id => 1 
Questions connexes