2009-10-27 4 views
0

J'essaie de renvoyer plus de messages informatifs d'échec d'une attente. J'ai une méthode d'aide qui itère un hachage, testant la protection d'assignation de masse sur un modèle. Si l'attente échoue, je voudrais indiquer quel attribut a échoué. Je suis tombé sur failure_message_for_should, mais je ne suis pas sûr de savoir comment l'utiliser correctement.Quelqu'un peut-il me montrer un exemple d'utilisation de failure_message_for_should en utilisant rspec?

Merci!

Répondre

0

failure_message_for_should Ce n'est pas un matcher, c'est une méthode que vous remplacez si vous écrivez votre propre matcher personnalisé. Je ne pense pas que ce soit ce que vous cherchez.

1

Il suffit d'écrire un simple matcher et vous pouvez alors spécifier vos propres messages. Jetez un oeil à ce code:

def be_even 
simple_matcher("an even number") { |given| given % 2 == 0 } 
end 

describe 2 do 
it "should be even" do 
    3.should be_even 
end 
end 

Mettez ce code dans un fichier appelé so_spec.rb et l'exécuter comme ceci:

spec so_spec.rb -f n -c 

Cela vous donnera la sortie suivante:

'2 should be even' FAILED 
expected "an even number" but got 3 

et vous pouvez facilement voir que "un nombre pair" est vraiment le message personnalisé et est plus informatif que prévu vrai obtenu faux. C'est une approche. Cependant, rspec est assez flexible et vous pouvez écrire vos propres matchers personnalisés comme l'a dit BJ Clark et cela vous donnera encore plus de flexibilité. J'ai utilisé à la fois des appariements personnalisés et simples et parfois un simple comparateur est suffisant. Il y a différentes façons d'en choisir une qui répond à vos besoins.