ruby-on-rails - 如何在 RSpec 中删除 years.ago 隐式引用的日期?

标签 ruby-on-rails ruby rspec

我知道我可以像这样在 Date 上创建一个方法:

allow(Date).to receive(:today).and_return Date.new(2015,11,10)

现在,如果在我的规范中代码调用 Date.today,我可以确信它会返回一个值为 11/10/2015 的 Date 对象。

我有一个使用 years.ago.to_date 的范围。用户为范围指定几年前的:例如:5.years.ago2.years.ago

我正在尝试测试这个范围。为此,我需要控制 years.ago 引用的 Date。例如,我总是希望日期为 1/1/2010。这样我就知道 5.years.ago 将返回 1/1/2005,而 2.years.ago 将返回 1/1/2008。

问题是我不知道要删掉什么。我不知道如何使 years.ago 使用的日期保持一致。

希望这是有道理的。我只需要控制 years.ago 使用的日期。我怎样才能消除它?

我看了看ActiveSupport::Duration ,但我不确定这是否是正确的地方。

最佳答案

你应该检查timecop

然后在您的测试中,您可以将 date 卡住为您想要的值,如下所示:

describe "some set of tests to mock" do
  before do
    Timecop.freeze(2010, 1, 1)
  end

  after do
    Timecop.return
  end

  it "should do blah blah blah" do
  end
end

关于ruby-on-rails - 如何在 RSpec 中删除 years.ago 隐式引用的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358957/

相关文章:

ruby-on-rails - 如何有效地测试 stripe 和我的 Controller ?

ruby-on-rails - 使用回形针保存文件而不上传

ruby-on-rails - Active Record 如何添加记录到 has_many :through association in rails

ruby - ruby 中的运算符 * 和 (*) 是什么意思?

ruby - 如何将 OpenSSL::ASN1::ASN1Data 转换为 IP 地址?

ruby - 如何使用多个 rspec_helpers

ruby-on-rails - HTML5 亚马逊 S3 直接上传

ruby-on-rails - 使用 strftime 解析日期

ruby - 如何在 Ruby 中随机取一段字符串?

ruby-on-rails - 我如何解决 "Missing host to link to! Please provide the :host parameter"? (返回率)