第一次水豚测试中的闹鬼错误 - 特拉维斯

Poltergeist Error on first Capybara Test - Travis

我的测试套件使用 Capybara 进行功能测试,使用 PhantomJS 作为无头测试的驱动程序。我们已经为我们的 CI 套件启动并使用 Travis,但我们仍然遇到套件 运行s 的失败(它在本地完美运行)。经过进一步检查,我意识到它总是第一个失败的 运行 功能测试,每次都失败,无论顺序如何(我们的测试以随机顺序执行)。失败后会出现此错误:

Capybara::Poltergeist::StatusFailError:
   Request to 'http://127.0.0.1:52455/#/login' failed to reach server, check DNS and/or server status
   # /home/travis/.rvm/gems/ruby-2.3.0/gems/poltergeist-1.9.0/lib/capybara/poltergeist/browser.rb:351:in `command'
   # /home/travis/.rvm/gems/ruby-2.3.0/gems/poltergeist-1.9.0/lib/capybara/poltergeist/browser.rb:34:in `visit'
   # /home/travis/.rvm/gems/ruby-2.3.0/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:95:in `visit'
   # /home/travis/.rvm/gems/ruby-2.3.0/gems/capybara-2.7.0/lib/capybara/session.rb:233:in `visit'
   # /home/travis/.rvm/gems/ruby-2.3.0/gems/capybara-2.7.0/lib/capybara/dsl.rb:52:in `block (2 levels) in <module:DSL>'

我们为 Poltergeist 使用 1.9.0 版,为 PhantomJS 使用 2.1.1 版。 运行 在此之后的每个测试都有效,即使它们依赖于此策略来工作(即在测试身份验证时)。

有没有人遇到过这个问题/有什么智慧可以分享吗?

听起来您的应用启动时间过长,请调查您的应用启动如此缓慢的原因,或者在其驱动程序注册中增加 poltergeist 的超时设置。

我最终通过将以下代码添加到 spec/spec_helper.rb 来解决问题:

config.before(:suite) do
  Capybara.current_driver = Capybara.javascript_driver
end

我的理解是将所有 Capybara 测试设置为从测试套件初始化时默认为 javascript 驱动程序 - 这完美地解决了问题。