2012-05-05 11 views
17

Sto usando MiniTest 2.12.1 (l'ultima versione del framework di test stock fornito con Ruby> = 1.9) e non riesco a capire come simulare un metodo di classe con esso, nello stesso modo in cui è possibile con elementi del calibro di Mocha, per esempio:Ruby: simulazione di un metodo di classe con MiniTest?

product = Product.new 
Product.expects(:find).with(1).returns(product) 
assert_equal product, Product.find(1) 

sono stato dilettarsi Internet per giorni e sto ancora trovare una risposta ragionevole a questo. Per favore aiuto?

+0

Credo che non è possibile fare questo tipo di _mocking_ con 'Minitest/mock', [duplicato?] (http://stackoverflow.com/questions/7211086/how-do-i-stub-things-in-minitest) – fguillen

risposta

17

Questo potrebbe non essere utile se si è bloccati utilizzando 2.12.1, ma sembra che abbiano aggiunto il metodo di stub a minitest/mock in HEAD here.

Quindi, erano di aggiornare a Minitest TESTA, credo che si potrebbe fare questo:

product = Product.new 
Product.stub(:find, product) do 
    assert_equal product, Product.find(1) 
end 
+0

Come si aggiorna a HEAD minitest? (grazie!) – mpelzsherman

+0

Sembra che abbiano etichettato una nuova versione da quando ho scritto questo, quindi non è necessario alcun aggiornamento a HEAD. La versione più recente è ora alla 3.5.0. Se usi bundler, puoi aggiornare minitest assicurandoti di avere una riga come questa nel tuo Gemfile: 'gem 'minitest', '3.5.0''. Se volessi risolvere la versione HEAD, avresti invece questo nel tuo Gemfile: 'gem 'minitest',: git => 'git: // github.com/seattlerb/minitest.git''. Se non stai usando Bundler, penso che 'gem update minitest' dovrebbe farlo. – Adam

+0

Giusto per chiarire: questo non è esattamente equivalente alla soluzione moka nella domanda: i parametri della chiamata '.find' non sono verificati con questa soluzione ... – severin

Problemi correlati