2013-05-02 56 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