我知道我可以像这样在 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.ago
、2.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/