Sul metodo chiamato doppio, le aspettative sull'argomento
Domanda
Ho creato un doppio, sto eseguendo il codice che lo chiamerà con un metodo e un enorme hash come argomento, voglio verificare una chiave dell'argomento, quindi restituire un hash specifico.
Questo è quello che sto facendo
before :each do
allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
expect(@my_double).to receive(:do_stuff) do |arg|
expect(arg).to be_a(Hash)
expect(arg[:my_arg]).to eq(3)
end
TestObject.stuff() # will invoke do_stuff on the double
end
.
Che succede è, viene chiamato la prima volta do_stuff
, restituisce true
che è il risultato del blocco receive
, ma sulle chiamate successive (testate in PRI) restituisce correttamente {stuff: 42}
ma poiché la prima chiamata è sbagliata, le mie eccezioni del metodofuori quando prova a call[:stuff]
sul ritorno.
Sto cercando di lasciare che allow
definisca il comportamento del doppio, quindi non voglio mettere il ritorno nella parte inferiore del expect
. Ma c'è un modo intorno ad esso?
Soluzione
ha capito la risposta è utilizzare un nome ancora Argomento non documentato Matcher hash_including
molto come il mio primo commento
expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))
.
funziona bene.