use*_*068 2 rspec capybara ruby-on-rails-5
执行rspec时,长时间没有响应,然后出现Net::ReadTimeout:,测试失败。
目前,我们正在Ubuntu docker上构建rails 5.1.7的开发环境。在此基础上,为了进行包括js在内的视图测试,使用系统测试的selenium_chrome_headless搭建了测试环境。
我删除了 application.html.erb 的源代码来确定错误发生的位置。结果我们发现<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>会超时。下面是一些代码。
application.html.erb
<!DOCTYPE html>
<html>
<head>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
规格/视图/hoges/index_spec.rb
<!DOCTYPE html>
<html>
<head>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
rails_helper.rb 的一部分
require 'rails_helper'
RSpec.feature 'MetaFramesIndex', type: :system, js: true do
scenario 'sample' do
visit hoges_index_path
end
end
Run Code Online (Sandbox Code Playgroud)
错误日志
Capybara.register_driver :selenium_chrome_headless do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
browser_options.args << '--no-sandbox'
browser_options.args << '--disable-gpu'
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
config.before(:each) do |example|
if example.metadata[:type] == :system
driven_by :selenium_chrome_headless, screen_size: [1400, 1400]
end
end
Run Code Online (Sandbox Code Playgroud)
我希望响应能够早点返回,而不是超时。
我们将等待答案。
如果响应仅在第一次测试时超时,则可能是构建资产管道花费的时间太长。一种解决方案是在运行测试之前为测试环境预编译资产。另一个潜在的问题是您安装的 chromedriver 与您正在运行的 Chrome 版本不匹配。您可以通过使用webdriversgem 来解决这个问题(首先完全删除chromedriver-helpergem - 包括它已安装的任何二进制填充程序)。
您的日志/代码带来的其他问题是您正在运行的 Capybara 版本是 18 个月前发布的,是时候更新了(在当前版本中,您可以通过将 :timeout 选项传递给 - https Capybara::Selenium::Driver.new: // /github.com/teamcapybara/capybara/blob/master/lib/capybara/selenium/driver.rb#L42)。此外,目前还不清楚为什么您要编写实际上是系统规范的视图规范。