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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top