Javascript 如何避免水豚验收测试中的延迟?

Javascript 如何避免水豚验收测试中的延迟?,javascript,jquery,ruby-on-rails,rspec,capybara,Javascript,Jquery,Ruby On Rails,Rspec,Capybara,我的Rails应用程序包含一个JavaScript模式,在用户单击链接45秒后弹出。结果,我的验收测试失败了。我的验收测试过去是在没有延误的情况下通过的 我最初尝试在水豚验收测试中使用Timecop gem来加快时间,但没有成功。然而,当我加上睡眠(45)时,这确实有效。显然,在我的规范中,我不能有3次睡眠(45),但最好知道什么是有效的,这样我就可以用更快的方法接近它 我从实验中得出的结论是Ruby跟踪时间,Javascript跟踪时间,Timecop是快速转发Ruby时间,而不是Javasc

我的Rails应用程序包含一个JavaScript模式,在用户单击链接45秒后弹出。结果,我的验收测试失败了。我的验收测试过去是在没有延误的情况下通过的

我最初尝试在水豚验收测试中使用Timecop gem来加快时间,但没有成功。然而,当我加上睡眠(45)时,这确实有效。显然,在我的规范中,我不能有3次睡眠(45),但最好知道什么是有效的,这样我就可以用更快的方法接近它

我从实验中得出的结论是Ruby跟踪时间,Javascript跟踪时间,Timecop是快速转发Ruby时间,而不是Javascript时间。有没有办法在我的水豚测试中快进45秒,这样我的Javascript事件就会触发

以下是导致我的测试失败的函数:

        $('.votable').one('click', '.vote', function() {
          $('.post-vote').
            delay(45000).
            queue(function() {
                $(this).dialog('open')
            });
        });

同样,当延迟被移除时,我的规格通过,但我需要延迟。我怎么能在水豚测试中剔除这个呢?或者我需要用Jasmine测试这个方法吗?

最后,这个问题最简单的解决方案是将我的.js文件变成.js.erb文件,然后使用分支只包括非测试环境中的延迟。不是很理想,但是所有其他的解决方案都要复杂得多,我绝对不愿意为了让我的视图代码看起来漂亮而将测试速度降低45秒

最终代码如下所示:

$('.votable').one('click'). '.vote', function() {
  $('.post-vote').
   <% unless Rails.env.test? %>
     delay(45000).
   <% end %>
   queue(function() {
     $(this).dialog('open')
    });
 });
$('.votable').one('click')。投票权',功能(){
$(“.投票后”)。
延迟(45 000)。
队列(函数(){
$(此).dialog('打开')
});
});

您能使延迟值动态吗?在您的测试环境中,您可以将其设置为大约50毫秒,而不是等待45k毫秒;更合理的时间量。你的意思是将延迟时间存储在变量中,然后在我的规范中重新定义该变量?这听起来是个好主意,你能举个例子吗?