【发布时间】:2013-03-19 01:01:56
【问题描述】:
我的 Rails 应用程序包含一个 JavaScript 模式,该模式会在用户单击链接后 45 秒弹出。结果,我的验收测试过去没有延迟就通过了。
我最初尝试在 Capybara 验收测试中使用 Timecop gem 来快进时间,但这不起作用。然而,当我添加一个 sleep(45) 时,它确实有效。显然,我不能在我的规范中使用 sleep(45) 3 次,但很高兴知道什么是有效的,这样我就可以用更快的方法接近它。
我从实验中得出的结论是,Ruby 跟踪时间,Javascript 跟踪时间,Timecop 快进 Ruby 时间而不是 Javascript 时间。有没有办法在我的 Capybara 测试中快进 45 秒,以便我的 Javascript 事件触发?
这是导致我的测试失败的函数:
$('.votable').one('click', '.vote', function() {
$('.post-vote').
delay(45000).
queue(function() {
$(this).dialog('open')
});
});
同样,当延迟被移除时,我的规范通过了,但我需要延迟。我怎样才能在我的 Capybara 测试中解决这个问题?或者我需要用 Jasmine 测试该方法吗?
【问题讨论】:
-
你能让延迟的值动态化吗?而不是等待 45k ms,您可以在您的测试环境中将其设置为 50 ms;更合理的时间。
-
@Deefour 您的意思是将延迟期存储在一个变量中,然后在我的规范中重新定义该变量?听起来不错,你能举个例子吗?
标签: javascript jquery ruby-on-rails rspec capybara