Ruby on rails 您可以使用Timecop gem在Rails中进行开发吗?

Ruby on rails 您可以使用Timecop gem在Rails中进行开发吗?,ruby-on-rails,gem,Ruby On Rails,Gem,我找到了时间旅行的宝石,比如Timecop,来测试与时间相关的特性。在开发过程中也使用这种方法是否可行和/或合理 如果没有:是否还有另一种适合开发的时间旅行者宝石?我找不到 是的,当然可以。下面是我构建的应用程序的一些示例代码,在该应用程序中,您可以通过管理区域设置日期,然后在会话期间浏览站点,就好像它是该日期一样: 应用程序内/controllers/concerns/time_travel_filters.rb: 然后你只需要在你想要使用的控制器中加入TimeTravelFilters 您需

我找到了时间旅行的宝石,比如Timecop,来测试与时间相关的特性。在开发过程中也使用这种方法是否可行和/或合理


如果没有:是否还有另一种适合开发的时间旅行者宝石?我找不到

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

应用程序内/controllers/concerns/time_travel_filters.rb:

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


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

在Rails 5+上仍然有效,但您必须使用around_操作,而不是around_筛选器。我用您的解决方案和UI创建了一个gem,让用户可以进行时间旅行
# 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