Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在n秒后失败或继续进行下一次RSpec测试?_Ruby On Rails_Ruby_Rspec_Rspec3 - Fatal编程技术网

Ruby on rails 如何在n秒后失败或继续进行下一次RSpec测试?

Ruby on rails 如何在n秒后失败或继续进行下一次RSpec测试?,ruby-on-rails,ruby,rspec,rspec3,Ruby On Rails,Ruby,Rspec,Rspec3,如果RSpec测试需要超过n秒的时间才能完成,我希望它失败(或继续)。我用它来调试在测试过程中应用程序暂停的地方 我需要将测试包装到事务中。我尝试创建一个超时块,但数据库没有清理,线程保持打开状态。也许数据库清洁器能帮上忙 理想情况下,我想用自定义消息替换水豚错误(见下文),如“强制超时” 我知道将失败放在测试中,但它只有在读取该行时才起作用。相反,如果一个测试已经在同一条线上运行了,比如说10秒钟,我希望它通过失败或调用一些continue方法移动到下一个测试 水豚失败消息示例: 1) E

如果RSpec测试需要超过n秒的时间才能完成,我希望它失败(或继续)。我用它来调试在测试过程中应用程序暂停的地方

  • 我需要将测试包装到事务中。我尝试创建一个
    超时
    块,但数据库没有清理,线程保持打开状态。也许数据库清洁器能帮上忙
  • 理想情况下,我想用自定义消息替换水豚错误(见下文),如
    “强制超时”
我知道将
失败
放在测试中,但它只有在读取该行时才起作用。相反,如果一个测试已经在同一条线上运行了,比如说10秒钟,我希望它通过失败或调用一些
continue
方法移动到下一个测试

水豚失败消息示例:

1) Exercise Login page - log in as user type
   Failure/Error: fill_in "Username", with: @user.name
   Capybara::ElementNotFound:
     Unable to find field "Username"

您可以将RSpec-around钩子与Ruby的Timeout结合使用。 在全球范围内,您可以这样设置,但如果您知道问题出在哪一个,您甚至可以在特定的测试中进行设置

require 'timeout'
time_limit = n

RSpec.configure do |c|
  c.around(:each) do |example|
    Timeout::timeout(time_limit) {
      example.run
    }
  end
end

您不应该在测试上实现超时,而应该在任何需要很长时间的事情上实现超时。所以,如果您正在长时间运行的进程试图连接到某个东西,那么您的HTTP客户端(或其他什么)应该检测它自己的超时。@Anthony我同意您的看法,但在这一点上,我不确定是什么花费了这么长的时间。例如,我在午餐时运行了我的套件,但在2分钟10次测试后它就停止了。在本例中,记录的最后一件事是
回滚
——没有什么可以说明回滚是如何崩溃的。在执行capybara规范时,您希望使用截断而不是事务,特别是在您使用webkit或selenium等javascript驱动程序时。另外,如果您正在使用Webkit、Poltergeist或Selenium,您可以在驱动程序级别设置超时,请参阅每个驱动程序的文档。@max我不知道Poltergeist或Capybara Webkit有超时方法。我将检查文档,谢谢。我使用的是Capybara,尝试使用它会显示“找不到元素”,而不是
Timeout
或其他内容。更新--这不起作用,因为它会影响数据库清理和线程。我将继续寻找解决办法。