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

B S*_*ven 2 tdd unit-testing overloading ruby-on-rails ruby-on-rails-3

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

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

class Date
  def  self.today
    Date.new(2011,7,19)
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Rails 3.07

B S*_*ven 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行:
    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'

  • 感谢B Seven花时间记录您的最终解决方案.SO的用户会很感激你花时间,我很乐意赞成. (2认同)