Réponses:
expect { some_method }.to raise_error
Syntaxe RSpec 1:
lambda { some_method }.should raise_error
Consultez la documentation (pour la syntaxe RSpec 1) et la documentation RSpec 2 pour plus d'informations.
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
Remarque: raise_erroret raise_exceptionsont interchangeables.
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
Remarque: raise_errorest un alias pour raise_exception.
RSpec 2:
RSpec 1:
Au lieu de lambda, utilisez s'attendre à:
expect { some_method }.to raise_error
Cela s'applique aux versions plus récentes de rspec, c'est-à-dire rspec 2.0 et plus.
Voir le doco pour plus.
expectest meilleur ou pire que lambda.
expect { visit welcome_path }.to raise_error
À partir de la version 3.3, rspec-expectionsgem émet un avertissement pour une erreur raise_error vide sans paramètre
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Cela vous donne une indication que votre code peut échouer avec une erreur différente de celle du test destiné à vérifier.
AVERTISSEMENT: L'utilisation de la correspondance
raise_errorsans fournir une erreur ou un message spécifique risque de faux positifs, carraise_errorcorrespondra lorsque Ruby déclenche unNoMethodError,NameErrorouArgumentError, permettant potentiellement à l'attente de passer sans même exécuter la méthode que vous avez l'intention d'appeler. Envisagez plutôt de fournir une classe ou un message d'erreur spécifique. Ce message peut être supressed par le réglage:RSpec::Expectations.configuration.warn_about_potential_false_positives = false.