2013-10-11 3 views
0

J'ai un modèle et une méthode à l'intérieur qui est défini comme suit:Comment faire un talon retourne une valeur de hachage

class Farm < ActiveRecord::Base 
    def flags 
    #has other code which returns a flag_details hash eg: 
    # flag_details['flag1'] = true; 
    # flag_details['flag2'] = false; 
    end 

end 

Maintenant je dois écrire un test pour vérifier qu'un div particulier est affichée sur la base de la indicateurs qui sont définis/désactivés. Et je veux écrire un bout pour pouvoir retourner ces drapeaux et ensuite tester si la page affiche la div correcte. Comment puis-je corriger le code suivant, pour obtenir ce que je veux:

scenario "display div named flower when flag1 or flag2 is false" do 
    farm.stub(:flags).and_return("flag1" => false, "flag2" => false) 
    if !farm.flags['flag1'] || !farm.flags['flag2'] 
     expect(page).to have_selector('div.flower', text: "4") 
    end  
    end 

Je suis un débutant en rubis, rails et rspec, de sorte que toute aide sera grande. J'ai aussi essayé d'utiliser la méthode suivante, mais cela n'a pas fonctionné:

farm.stub(:flags[]).with('flag1').and_return(false) 
farm.stub(:flags[]).with('flag2').and_return(false) 

J'ai vérifié également cette documentation (https://www.relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs) mais n'a pas obtenu ma réponse. Tous les autres liens qui pourraient être utiles dans ce domaine, sont vraiment appréciés!

Merci!

Répondre

4

Je pense que vous devriez juste être en mesure de conclure que la valeur de retour dans les accolades ({}) et il devrait résoudre votre problème:

farm.stub(:flags).and_return({"flag1" => false, "flag2" => false}) 
2

D'abord, se débarrasser de si elle est conditionnelle dans votre test. Il n'y a aucune raison d'ajouter un flux de contrôle à un test. Comment stubbing fonctionne: Votre test doit appeler la méthode flags sur cet objet de ferme et il renverra le hachage que vous avez spécifié. Avoir votre scénario visiter la page en question, puis vérifier pour s'assurer que l'attente se comporte comme vous l'avez prévu.

+0

C'est un bon point, je vais changer selon cette directive. A ma question, je devrai accepter la réponse donnée par @theTRON –

Questions connexes