我有一个 JavaScript 组件(例如日期选择器),它很大程度上依赖于 -
- 当前系统时间
- 当前系统时区
在 Ruby 和 Capybara 中,可以在诸如Timecop https://github.com/travisjeffery/timecop.
是否也可以在水豚控制的无头浏览器中存根这些值?
Thanks!
编辑:这是 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"
正如您所发现的,Timecop 仅影响测试和被测应用程序的时间。浏览器作为一个单独的进程运行,完全不受 Timecop 的影响。因此,您需要在浏览器中存根/模拟时间,并使用为此设计的众多 JS 库之一。我一般用的是sinon
- http://sinonjs.org/ http://sinonjs.org/- ,我有条件地安装在页面中head
使用类似的东西
- if defined?(Timecop) && Timecop.top_stack_item
= javascript_include_tag "sinon.js" # adjust based on where you're loading sinon from
- unix_millis = (Time.now.to_f * 1000.0).to_i
:javascript
sinon.useFakeTimers(#{unix_millis});
这应该适用于haml
模板(如果使用则调整erb
)并且每当访问页面时就会安装并模拟浏览器时间,同时使用 Timecop 来模拟应用程序时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)