javascript - 如何在 Capybara 验收测试中 stub JavaScript 延迟?

标签 javascript jquery ruby-on-rails rspec capybara

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/

相关文章:

javascript - 扫描全能王应用程序如何自动检测任何纸张或任何卡片?我如何在 JavaScript 中实现相同的功能?

javascript - 为什么没有添加 style.height ?

javascript - 使用 ng-pattern 识别 Angular 字母数字字段中的前导零

ruby-on-rails - Docker,所有其他正在运行的服务都拒绝连接

ruby-on-rails - Rails 枚举负范围(如果不是)

javascript - jQGrid本地排序数据两列分组

javascript - 多个音频,当前正在使用 javascript 播放时自动停止其他音频

jquery - bxslider 内的 bxslider - jquery

jquery-ui - 如何向 jQuery 点击函数发送多个参数?

ruby-on-rails - 在 .map() 中使用变量