2013-05-02 54 views
0

任何人都可以提出为什么此规范使用Timecop 0.6.1和Ruby 2.0.0失败吗?Timecop和Ruby 2.0.0

(它通过使用时空特警0.4.5和1.9.3的Ruby)

require 'timecop' 
require 'spec_helper' 

describe Class do 
    it "freezes time" do 
    Timecop.freeze Date.new(2012,7,1) do 
     expect(Date.today).to eq(Date.new 2012,7,1) 
    end 
    end 
end 

导致:

$ rspec spec/models/time_cop_spec.rb 

Failures: 

    1) Class freezes time 
    Failure/Error: expect(Date.today).to eq(Date.new 2012,7,1) 

     expected: Sun, 01 Jul 2012 
      got: Thu, 02 May 2013 

     (compared using ==) 

     Diff: 
     @@ -1,2 +1,2 @@ 
     -Sun, 01 Jul 2012 
     +Thu, 02 May 2013 

回答

1

有一个非常明确和consise回答这个(和pull请求解决它)上Timecop's GitHub Repo

简短的回答:在捆扎机版本的变化,不是在Ruby或时空特警版本的变化,导致此问题。

简短解决方案:将require 'date'添加到顶部(在require 'timecop'之前)。

感谢@micahchalmer :)

0

下过得那么它出现Date.today支持,取而代之的被丢弃Time.now.to_date

require 'timecop' 
require 'spec_helper' 

describe Class do 
    it "freezes time" do 
    Timecop.freeze Date.new(2012,7,1) do 
     expect(Time.now.to_date).to eq(Date.new 2012,7,1) 
    end 
    end 
end 
0

你确定你没有受到另一个问题的困扰吗?我使用ruby 2.0.0-p0运行你的代码,并使用timecop 0.6.1,它运行良好。即运行代码:

require 'timecop' 
puts "ruby version: #{RUBY_VERSION}" 
puts "timecop version: #{Timecop::VERSION}" 

describe Class do 
    it "freezes time" do 
    Timecop.freeze Date.new(2012,7,1) do 
     expect(Date.today).to eq(Date.new 2012,7,1) 
    end 
    end 
end 

结果:

$ rspec test.rb 
ruby version: 2.0.0 
timecop version: 0.6.1 
. 

Finished in 0.00082 seconds 
1 example, 0 failures 
+0

感谢这个大卫。当我将'Date.today'切换为'Time.now.to_date'时,现在更加困惑...... – Mike 2013-05-02 15:53:22