[RUBY] Überprüfen Sie die Argumente für Methodenaufrufe in Blöcken mit RSpec

Mit "erwarten (foo) .zu empfangen (: bar) .mit (...)" von RSpec können Sie Argumente [auf verschiedene Arten] überprüfen (https://relishapp.com/rspec/rspec-mocks/). v / 3-9 / docs / einstellungsbeschränkungen / übereinstimmende Argumente), aber es gibt einige Fälle, in denen Sie mit Blöcken überprüfen möchten.

Sie können einen Matcher an with übergeben, um einen benutzerdefinierten Matcher zu definieren. Im folgenden Beispiel werden nur bestimmte Strukturattribute überprüft

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

Beachten Sie, dass die Argumentvalidierung durch "with" für jedes Argument durchgeführt wird. Bei einer Methode, die mehrere Argumente akzeptiert, muss für jedes Argument ein Matcher übergeben werden.

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

Überprüfen Sie die Argumente für Methodenaufrufe in Blöcken mit RSpec
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
Überprüfen Sie den CSV-Wert mit RSpec
Wie man ganze Zahlen mit Rubin überprüft
[ruby] Eine Methode mit einem Argument aufrufen
Verwenden Sie den Konstruktor mit Argumenten in cucumber-picocontainer
Rufen Sie die Super-Methode in Java auf
Überladungsmethode mit Int- und Integer-Argumenten
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Parallelitätsmethode in Java mit grundlegendem Beispiel
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Informationen zum Aufruf-Timing und zu den Argumenten der addToBackStack-Methode
Informationen zu den Zeichen, die im Argument der Methode vervollständigt werden
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Fügen Sie das Bild mit der statischen Java-Methode in die JAR-Datei ein
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Ich habe in RSpec den Fehler "undefined method` create '" erhalten
Überprüfen Sie die Abdeckung mit Codecov in der Java + Gradle + Wercker-Konfiguration