你可以在Rails中使用Timecop gem进行开发吗?

时间:2015-08-20 22:52:31

标签: ruby-on-rails gem

我找时间旅行像Timecop这样的宝石,以及测试时间相关的功能。是否有可能和/或明智地在开发中使用它?

如果没有:是否还有其他时间的旅行者宝石,适合开发?我找不到一个。

1 个答案:

答案 0 :(得分:2)

是的,确定你可以。以下是我构建的应用中的一些示例代码,您可以通过管理区域设置日期,然后在会话期间浏览网站,就好像该日期一样:

app/controllers/concerns/time_travel_filters.rb中的

# This allows us to set a different date
# in the admin area, and use TimeCop to process each
# request as being on that different date - useful for
# testing different phases of the challenge.
module TimeTravelFilters
  extend ActiveSupport::Concern

  included do
    if Rails.env.development? || Rails.env.staging?
      around_filter :time_travel_for_request
    end
  end

  def time_travel_for_request
    time_travel
    yield
    time_travel_return
  end

  def time_travel
    logger.info 'TIME TRAVEL START'
    if session[:timecop_date]
      Timecop.travel(session[:timecop_date])
    else
      Timecop.return
    end
  end

  def time_travel_return
    logger.info 'TIME TRAVEL RETURN'
    Timecop.return
  end
end

然后你只需要在你想要使用它的控制器中include TimeTravelFilters

您需要设置session[:timecop_date]才能使其生效 - 我通过管理区域中的页面上的表单执行此操作,但您可以随意执行此操作。返回当前时间就像删除该会话密钥一样简单。