2012-05-05 80 views
17

我正在使用MiniTest 2.12.1(Ruby> = 1.9附帶的股票測試框架的最新版本),我無法弄清楚如何用它來模擬類方法,這與使用類似於Mocha,例如:Ruby:用MiniTest嘲笑類方法?

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

我已經涉足互聯網的天,我還是找到一個合理的答案。請幫忙?

+0

我覺得是不可能做出這種_mocking_與'MINITEST/mock',[複製?]( http://stackoverflow.com/questions/7211086/how-do-i-stub-things-in-minitest) – fguillen

回答

17

如果您使用2.12.1卡住了,這可能對您沒有幫助,但看起來像是他們在HEAD here中添加了方法存根至minitest/mock。

那麼,是你更新到MINITEST的頭,我覺得你可以這樣做:

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

你如何更新到minitest HEAD? (謝謝!) – mpelzsherman

+0

看起來他們已經爲我寫了一個新版本,因此不需要更新HEAD。最新版本現在在3.5.0。如果你使用的是捆綁器,你可以通過確保你的Gemfile裏有這樣一行:'gem'minitest','3.5.0''來更新minitest。如果你想解決HEAD版本問題,你可以在你的Gemfile中使用:'gem'minitest',:git =>'git:// github.com/seattlerb/minitest.git''。如果你不使用Bundler,我認爲'gem update minitest'應該這樣做。 – Adam

+0

只是爲了澄清:這不完全等同於問題中的摩卡解決方案:'.find'調用的參數未通過此解決方案進行驗證... – severin