模拟Time.now与摩卡

时间:2015-11-26 07:39:03

标签: ruby unit-testing time mocking mocha

要使用mocha gem模拟Time.now我使用以下oneliner。

require 'minitest/autorun'                          
require 'mocha/mini_test'                                                                           
require 'time'                                      

class TimeMockTest < Minitest::Test                 
  def test_time_mock       
    # Mocking Time.now in one line                         
    Time.expects(:now).returns(Time.parse('20:12'))

    Time.now                                        
  end                                               
end    

但是,由于Time.parse()使用模拟的Time.now()方法,因此运行此代码会返回以下错误。

NoMethodError: undefined method `year' for nil:NilClass
    C:/Ruby22-x64/lib/ruby/2.2.0/time.rb:255:in `make_time'
    C:/Ruby22-x64/lib/ruby/2.2.0/time.rb:364:in `parse'
    time_mock.rb:8:in `test_time_mock'

你如何用mocha模拟Time.now?

1 个答案:

答案 0 :(得分:1)

您应该检查https://github.com/travisjeffery/timecop。 它将帮助您在测试中处理时间。