我正在使用默認的Rails測試。在Rails 3中重載方法的最佳方法?
在一個測試中,我重載Date.today方法:
class Date
def self.today
Date.new(2011,7,19)
end
end
這個偉大的工程在此文件中的測試,但延續到其他的測試,並導致它們失敗。如何將此代碼的效果限制在單個文件中?
我認爲這可能不是測試的最佳方式。你有推薦的一步一步的教程嗎?
謝謝。
Rails 3.07
我正在使用默認的Rails測試。在Rails 3中重載方法的最佳方法?
在一個測試中,我重載Date.today方法:
class Date
def self.today
Date.new(2011,7,19)
end
end
這個偉大的工程在此文件中的測試,但延續到其他的測試,並導致它們失敗。如何將此代碼的效果限制在單個文件中?
我認爲這可能不是測試的最佳方式。你有推薦的一步一步的教程嗎?
謝謝。
Rails 3.07
感謝上面的代碼d11wtq。
我是這樣做的:
gem install 'mocha'
gem 'mocha'
到組:在Gemfile中測試(見下文)bundle install
require 'mocha'
require 'test_helper'
setup do Date.stubs(:today).returns(Date.new(2011, 7, 19)) end
我發現這個職位有幫助的介紹摩卡:http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/
編輯:更多信息:
我發現,你需要添加下面的每個測試後刪除存根。我把這個設置方法後:
teardown do Date.unstub(:today) end
而且,我認爲你需要下面的寶石到:在Gemfile中試驗組,以及: gem 'test-unit', '1.2.3'
謝謝您B Seven花時間記錄您的最終解決方案。所有SO用戶都會很感激您花時間,我很樂意爲您效勞。 –
同意;大家都贏了。 –
你可能想模仿對象。搜索Ruby模擬對象寶石,有幾種可供選擇。 – d11wtq
此外,如果這隻適用於日期和時間,請參閱https://gist.github.com/1033857(您可以試試Timecop,但我會提醒您,它存在DST問題,可能並會破壞您的測試) 。 – d11wtq
你會如何摩卡重載日期對象?你如何防止覆蓋轉移到其他測試?代碼在哪裏?在測試文件中的測試課之前?在測試助手文件中? –