Timecop和Ruby 2.0.0

时间:2013-05-02 15:10:04

标签: ruby rspec ruby-2.0 timecop

有人能说出为什么这个规范使用Timecop 0.6.1和Ruby 2.0.0失败了吗?

(使用Timecop 0.4.5和Ruby 1.9.3传递)

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

3 个答案:

答案 0 :(得分:1)

Timecop's GitHub Repo上有一个非常明确和明确的答案(以及解决它的拉取请求)。

简短回答:Bundler版本的更改,不是Ruby或Timecop版本的更改,导致了这个问题。

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

感谢@micahchalmer:)

答案 1 :(得分: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

答案 2 :(得分:0)

你确定你没有遭受另一个问题吗?我使用ruby 2.0.0-p0运行代码,时间顺序为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