Je veux tester une fonction sur un de mes modèles qui génère des erreurs spécifiques. La fonction ressemble à ceci:Rails ActiveSupport: Comment affirmer qu'une erreur est survenue?
def merge(release_to_delete)
raise "Can't merge a release with itself!" if(self.id == release_to_delete.id)
raise "Can only merge releases by the same artist" if(self.artist != release_to_delete.artist )
#actual merge code here
end
Maintenant, je veux faire une assertion que lorsque j'appelle cette fonction avec un paramètre qui fait que les exceptions sont jetés en fait chacun de ces exceptions. Je regardais la documentation d'ActiveSupport, mais je ne trouvais rien de prometteur. Des idées?
Merci! J'ai dû utiliser "RuntimeError" au lieu de l'exception cependant, comme ceci: assert_raise (RuntimeError) {artist1.merge (artist1)} Ce guide a été extrêmement utile: http://guides.rubyonrails.org/testing.html – spilliton
@spilliton: C'est parce que l'interpréteur Ruby traite le code ci-dessus comme 'assert_raise (Exception() {whatever.merge})', c'est-à-dire qu'il recherche une méthode appelée 'Exception' qui est appelée avec le bloc donné. L'ajout des parenthèses résout cette ambiguïté. (Déjà corrigé la réponse) –
Dans rspec 3, utilisez 'expect {whatever.merge} .to raise_error' (http://www.relishapp.com/rspec/rspec-expectations/v/3-1/docs/built- in-matchers/raise-error-matcher) –