如何解决如何为多域应用程序设置Github CI for Rails + Rspec + Capybara和Selenium Webdrivers?
问题
在Github的CI上运行时,尝试访问页面时出现SocketError: getaddrinfo: Name or service not known
。
2.1) Failure/Error: visit '/'
SocketError:
getaddrinfo: Name or service not known
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `find_available_port'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:37:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `block in session_pool'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:315:in `current_session'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:46:in `page'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>'
# ./spec/system/register_system_spec.rb:8:in `block (3 levels) in <main>'
2.2) Failure/Error: server = TCPServer.new(host,0)
SocketError:
getaddrinfo: Name or service not known
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `find_available_port'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:37:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `initialize'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `new'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `block in session_pool'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:315:in `current_session'
# /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:46:in `page'
# /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:54:in `save_image'
# /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:25:in `take_screenshot'
# /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:37:in `take_failed_screenshot'
# /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb:21:in `after_teardown'
使用rspec
和selenium_google_chrome_headless
或selenium_google_chrome
都可以在我的本地环境上正确运行测试。
应用
- 这是一个多域应用程序,因此我的测试使用
before { Capybara.app_host = "http://#{subdomain}.myapp.test" }
- 库版本
- Ruby 2.5.5
-
gem 'rails','~> 5.2.4'
-
gem 'rspec-rails','~> 3.8'
-
capybara (3.33.0)
-
webdrivers (4.4.1)
-
selenium-webdriver (3.142.7)
-
- 这是我的Github CI工作流程
env:
RUBY_VERSION: 2.5.5
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Start database
run: |
sudo systemctl start mysql
- name: Set up Ruby 2.5.5
run: |
sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt-get update
sudo apt-get -y install rvm
source /etc/profile.d/rvm.sh
rvm install ${{ env.RUBY_VERSION }}
- name: setup-chromedriver
uses: nanasess/setup-chromedriver@v1.0.1
- name: Build and test
env:
DATABASE_PASSWORD: root
run: |
source /etc/profile.d/rvm.sh
rvm use ${{ env.RUBY_VERSION }}
gem install bundler
bundle install --jobs 4 --retry 3
mysql -uroot -p${{ env.DATABASE_PASSWORD }} --execute="CREATE DATABASE myapp_test"
RAILS_ENV=test rails db:setup
bundle exec rspec spec/system
解决方法
使用 :headless_chrome 作为 javascript 浏览器,在 spec/spec_helper.rb 中有 this 配置
,添加
Capybara.server = :puma
到我的spec/rails_helper.rb
文件似乎可以解决我的主要问题。
我的测试仍然没有通过Github Action,但是看起来是另一个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。