2013-07-10 18 views
67

il seguente pezzo di codice funziona come previsto:Object.any_instance should_receive vs aspettarsi() per ricevere

Object.any_instance.should_receive(:subscribe) 

Ma quando si utilizza la nuova aspettativa RSpec che non funziona:

expect(Object.any_instance).to receive(:subscribe) 

L'errore is:

expected: 1 time with any arguments 
received: 0 times with any arguments 

Come posso rendere questo lavoro con expect() per ricevere?

risposta

141

Ora c'è un metodo non molto ben documentato chiamato expect_any_instance_of che gestisce il caso speciale any_instance. È necessario utilizzare:

expect_any_instance_of(Object).to receive(:subscribe) 

Google expect_any_instance_of per ulteriori informazioni.

+0

+1 per "non molto ben documentato". Ancora il caso. http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ExampleMethods:expect_any_instance_of – johngraham

+0

Ho usato 'allow_any_instance_of'. È un alias di questo metodo? – rubyprince

+0

@rubyprince Sono diversi, con il metodo di stub dei metodi consenti e si aspettano che i metodi testino il comportamento. Ad esempio, 'allow (my_obj) .per ricevere (: method_name) .and_return (true)' stubs 'my_obj.method_name() 'quindi se viene chiamato nel test restituisce semplicemente' true'. 'expect (my_obj) .per ricevere (: method_name) .and_return (true)' non modifica alcun comportamento, ma imposta un'aspettativa di test in errore se 'my_obj.method_name()' non viene chiamato più tardi nel prova o non restituisce vero. – Saigo