在Rails 3中重载方法的最佳方法?

时间:2011-08-25 23:36:25

标签: ruby-on-rails ruby-on-rails-3 unit-testing tdd overloading

我正在使用默认的Rails测试。

在一次测试中,我正在重载Date.today方法:

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

这适用于此文件中的测试,但会延续到其他测试并导致它们失败。如何将此代码的效果限制在单个文件中?

我认为这可能不是进行测试的最佳方式。是否有您推荐的分步教程?

感谢。

Rails 3.07

1 个答案:

答案 0 :(得分:5)

感谢上面代码的d11wtq。

我是这样做的:

  1. $ gem install 'mocha'
  2. gem 'mocha'添加到组:在Gemfile中测试(见下文)
  3. $ bundle install
  4. 在model_test.rb文件中,在require 'mocha'之后添加了require 'test_helper'
  5. 在model_test.rb中的类ModelTest中添加了以下3行:
  6.     setup do      
          Date.stubs(:today).returns(Date.new(2011, 7, 19))
        end
    

    我发现这篇文章对Mocha有用的介绍:http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/

    编辑:更多信息:

    我发现您需要添加以下内容以在每次测试后删除存根。我把它放在设置方法之后:

      teardown do
        Date.unstub(:today)
      end
    

    而且,我认为你需要以下gem:Gemfile中的test组:   gem 'test-unit', '1.2.3'