我有一个JavaScript组件(例如日期选择器),它严重依赖于-
1.当前系统时间
1.当前系统时区
在Ruby和Capybara中,可以在Timecop等库的帮助下随时存根。
是否也可以在Capybara控制的无头浏览器中存根这些值?
谢谢!
编辑:这里有一个例子,说明Ruby是如何被存根化的,但是Capybara的浏览器仍然使用系统时间
before do
now = Time.zone.parse("Apr 15, 2018 12:00PM")
Timecop.freeze(now)
visit root_path
binding.pry
end
> Time.zone.now
=> Sun, 15 Apr 2018 12:00:00 UTC +00:00
> page.evaluate_script("new Date();")
=> "2018-03-27T04:15:44Z"
4条答案
按热度按时间kr98yfug1#
正如你所发现的,Timecop只影响测试和测试中的应用程序的时间。浏览器作为一个单独的进程运行,完全不受Timecop的影响。因此,你需要在浏览器中使用许多JS库中的一个来存根/模拟时间。我通常使用的是
sinon
-http://sinonjs.org/-,我在页面head
中有条件地安装它,使用类似这应该可以在
haml
模板中工作(如果使用erb
则进行调整),并且每当访问页面时都会安装和模拟浏览器时间,而Timecop则用于模拟应用程序时间。mwg9r5ms2#
我知道这个问题有点老了,但我们有同样的请求,并找到了以下解决方案来使用rails6:
wz1wpwve3#
这有助于我与
zonebie
gem配对使用zy1mlcev4#
您可以在注册水豚驱动程序时传递时区进行测试: