2012-09-28 9 views
5

Ich habe einige Code Rubin, die wie folgt aussieht:RSpec - Use-Test doppelt als Block-Argument

Something.create do |x| 
    x.foo = bar 
end 

Ich möchte einen Test schreiben, die eine Doppel anstelle des Block-Argument x verwendet wird, so dass Ich kann dann anrufen:

x_double.should_receive(:foo).with("whatever"). 

Ist das möglich?

Antwort

8
specify 'something' do 
    x = double 
    x.should_receive(:foo=).with("whatever") 
    Something.should_receive(:create).and_yield(x) 
    # call the relevant method 
end 
+0

Ausgezeichnet! Danke – stubotnik

+3

Es ist eine gute Antwort, aber ich möchte nitpick. 'Something.should_receive (: create)' ist ein Test - eine Behauptung - aber es behauptet nicht das Verhalten, das stubotnik sagte, dass er testen wollte. Also würde ich das Test-Setup von dem zu testenden Verhalten unter Verwendung von "Something.stub (: create) .and_return (x)" unterscheiden, was nichts über das Verhalten von "Something.create" behauptet –