Comment utiliser RS_Cec avec un type d’exception?

J’aimerais faire quelque chose comme ça:

some_method.should_raise  

Comment devrais-je faire ça?

 some_method.should_raise exception 

… ne fonctionne pas

 expect { some_method }.to raise_error 

RSpec 1 Syntaxe:

 lambda { some_method }.should raise_error 

Consultez la documentation (pour la syntaxe RSpec 1) et la documentation RSpec 2 pour plus d’informations.

Au lieu de lambda, utilisez:

  expect { some_method }.to raise_error 

Ceci est valable pour les versions plus récentes de rspec, à savoir rspec 2.0 et les versions ultérieures.

Voir le doco pour plus.

RSpec 2

 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_error et raise_exception sont interchangeables.

RSpec 1

 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_error est un alias pour raise_exception .

Documentation: https://www.relishapp.com/rspec

RSpec 2:

RSpec 1:

La syntaxe a changé récemment et maintenant c’est:

 expect { ... }.to raise_error(ErrorClass) 

À partir de la version 3.3 sur rspec-expections gem déclenche un avertissement pour un 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 du raise_error sans fournir d’erreur ou de message spécifique risque de raise_error des faux positifs, car raise_error correspondra lorsque Ruby déclenche une NoMethodError , NameError ou ArgumentError , permettant potentiellement à l’attente de passer sans même exécuter la méthode à appeler. Au lieu de cela, envisagez de fournir une classe ou un message d’erreur spécifique. Ce message peut être supprimé en définissant: RSpec::Expectations.configuration.warn_about_potential_false_positives = false .