[RUBY] Vérifier les arguments d'appel de méthode dans les blocs avec RSpec

ʻEspec (foo) .to receive (: bar) .with (...) `vérifie les arguments [de plusieurs manières](https://relishapp.com/rspec/rspec-mocks/ v / 3-9 / docs / setting-contraintes / matching-arguments), mais il existe de nombreux cas où vous souhaitez vérifier avec des blocs.

Vous pouvez transmettre une correspondance à with, afin de pouvoir définir une correspondance personnalisée. L'exemple ci-dessous ne valide que certains attributs Struct

RSpec::Matchers.define :a_valid_argument do
  match {|actual| block_arg.call(actual) }
end

it "should call with valid argument" do
  jon = Struct.new(:name).new("Jon")

  expect($stdout).to receive(:write).with(
    a_valid_argument {|a| a.name == "Jon" },
  )

  $stdout.write(jon)
end

Notez que la validation des arguments par with est effectuée pour chaque argument, donc dans le cas d'une méthode qui prend plusieurs arguments, il est nécessaire de passer matcher pour chaque argument.

it "should call with valid arguments" do
  jon = Struct.new(:name).new("Jon")
  dany = Struct.new(:name).new("Dany")

  expect($stdout).to receive(:write).with(
    a_valid_argument {|a| a.name == "Jon" },
    a_valid_argument {|a| a.name == "Dany" },
  )

  $stdout.write(jon, dany)
end

Recommended Posts

Vérifier les arguments d'appel de méthode dans les blocs avec RSpec
Appelez votre propre méthode avec PreAuthorize dans Spring Security
Vérifiez la valeur CSV avec RSpec
Comment vérifier les nombres entiers avec ruby
[ruby] Appel d'une méthode avec un argument
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Appelez la super méthode en Java
Méthode de surcharge avec arguments Int et Integer
Appel de méthodes Java à partir de JavaScript exécutées en Java
Méthode de concurrence en Java avec exemple de base
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
À propos de la synchronisation des appels et des arguments de la méthode addToBackStack
A propos des caractères qui sont complétés dans l'argument de la méthode
Comment appeler des fonctions en bloc avec la réflexion Java
Inclure l'image dans le fichier jar avec la méthode statique java
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
J'ai eu une erreur "méthode non définie` create" "dans RSpec
Vérifiez la couverture avec Codecov dans la configuration Java + Gradle + Wercker