Docker+Rspec+Cuprite运行Rails系统测试时出现空白页问题
Docker化Rails应用系统测试失败排查(Rspec + Cuprite)
我有一个基于Rails 5.2、Ruby 2.5.8的Docker化应用,目前运行正常,但使用Rspec和Cuprite执行系统测试时全部失败。我按照《System of a Test: Setting Up End-to-End Rails Testing》指南完成配置,运行测试套件后所有系统测试均未通过。
尝试运行简单测试(例如访问页面并检查文本是否存在),但始终失败。查看测试生成的截图,仅显示空白页;使用page.driver.pause调试Cuprite时也是同样的空白状态。我在控制器动作中添加了binding.pry,但完全未触发。
错误信息如下:
Failure/Error: expect(page).to have_text('Foo') expected to find text "Foo" in ""
相关配置文件
docker-compose.yml
rspec_system: build: . tty: true stdin_open: true depends_on: - db - chrome volumes: - .:/usr/src/app:cached - bundler:/usr/local/bundle:delegated - bootsnap_cache:/usr/src/bootsnap:delegated - rails_cache:/usr/src/app/tmp/cache:delegated environment: - DATABASE_URL=postgres://postgres:postgres@db:5432/ - CHROME_URL=http://chrome:3333 ports: - '3000:3000' chrome: image: barrenechea/browserless:latest ports: - "3333:3333" volumes: - .:/usr/src/app:cached environment: PORT: 3333 CONNECTION_TIMEOUT: 600000
spec/support/cuprite_setup.rb
REMOTE_CHROME_URL = ENV["CHROME_URL"] REMOTE_CHROME_HOST, REMOTE_CHROME_PORT = if REMOTE_CHROME_URL URI.parse(REMOTE_CHROME_URL).yield_self do |uri| [uri.host, uri.port] end end # 检查远程Chrome是否运行并配置Capybara驱动 remote_chrome = begin if REMOTE_CHROME_URL.nil? false else Socket.tcp(REMOTE_CHROME_HOST, REMOTE_CHROME_PORT, connect_timeout: 1).close true end rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, SocketError false end remote_options = remote_chrome ? {url: REMOTE_CHROME_URL} : {} require "capybara/cuprite" Capybara.register_driver(:better_cuprite) do |app| Capybara::Cuprite::Driver.new( app, **{ window_size: [2560, 1440], browser_options: remote_chrome ? {"no-sandbox" => nil} : {}, inspector: true }.merge(remote_options) ) end Capybara.default_driver = Capybara.javascript_driver = :better_cuprite
RSpec系统测试相关配置
config.prepend_before(:each, type: :system) do driven_by Capybara.javascript_driver end
Capybara.server_host = "0.0.0.0" Capybara.app_host = "http://#{ENV.fetch("APP_HOST", `hostname`.strip&.downcase || "0.0.0.0")}"
内容的提问来源于stack exchange,提问作者nigal
相关产品推荐
相关产品推荐

