作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
My 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 测试该方法吗?
最佳答案
最后,这个问题最简单的解决方案是将我的.js 文件变成.js.erb 文件,然后使用分支只包括非测试环境中的延迟。不理想,但所有其他解决方案都涉及更多,我绝对不愿意为了让我的 View 代码看起来漂亮而将测试速度减慢 45 秒。
最终代码如下所示:
$('.votable').one('click'). '.vote', function() {
$('.post-vote').
<% unless Rails.env.test? %>
delay(45000).
<% end %>
queue(function() {
$(this).dialog('open')
});
});
关于javascript - 如何在 Capybara 验收测试中 stub JavaScript 延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489767/
我是一名优秀的程序员,十分优秀!