2011-08-25 85 views
2

我正在使用默認的Rails測試。在Rails 3中重載方法的最佳方法?

在一個測試中,我重載Date.today方法:

class Date 
    def self.today 
    Date.new(2011,7,19) 
    end 
end 

這個偉大的工程在此文件中的測試,但延續到其他的測試,並導致它們失敗。如何將此代碼的效果限制在單個文件中?

我認爲這可能不是測試的最佳方式。你有推薦的一步一步的教程嗎?

謝謝。

Rails 3.07

+0

你可能想模仿對象。搜索Ruby模擬對象寶石,有幾種可供選擇。 – d11wtq

+1

此外,如果這隻適用於日期和時間,請參閱https://gist.github.com/1033857(您可以試試Timecop,但我會提醒您,它存在DST問題,可能並會破壞您的測試) 。 – d11wtq

+0

你會如何摩卡重載日期對象?你如何防止覆蓋轉移到其他測試?代碼在哪裏?在測試文件中的測試課之前?在測試助手文件中? –

回答

5

感謝上面的代碼d11wtq。

我是這樣做的:

  1. $ gem install 'mocha'
  2. 新增gem 'mocha'到組:在Gemfile中測試(見下文)
  3. $ bundle install
  4. 在model_test.rb文件,在添加require 'mocha'require 'test_helper'
  5. 將以下3行添加到model_test.rb中的ModelTest類中:
 
    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'

+2

謝謝您B Seven花時間記錄您的最終解決方案。所有SO用戶都會很感激您花時間,我很樂意爲您效勞。 –

+1

同意;大家都贏了。 –