您可以使用 Timecop gem 在 Rails 中进行开发吗?
Can you use Timecop gem for development In Rails?
我发现时间旅行 gems 像 Timecop,测试 时间相关的特征。 and/or 也可以在 开发 中使用它吗?
如果没有:还有其他时间旅行者gem,适合开发吗?我找不到一个。
是的,当然可以。以下是我构建的应用程序中的一些示例代码,您可以在其中通过管理区域设置日期,然后在会话期间就好像是该日期一样浏览网站:
在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]
才能生效 - 我通过管理区域页面上的表单来执行此操作,但您可以根据需要进行操作。回到当前时间就像删除那个会话密钥一样简单。
我发现时间旅行 gems 像 Timecop,测试 时间相关的特征。 and/or 也可以在 开发 中使用它吗?
如果没有:还有其他时间旅行者gem,适合开发吗?我找不到一个。
是的,当然可以。以下是我构建的应用程序中的一些示例代码,您可以在其中通过管理区域设置日期,然后在会话期间就好像是该日期一样浏览网站:
在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]
才能生效 - 我通过管理区域页面上的表单来执行此操作,但您可以根据需要进行操作。回到当前时间就像删除那个会话密钥一样简单。