【发布时间】:2021-06-04 21:41:50
【问题描述】:
在 ruby 2.6.1 中,rails 6.0 我正在尝试让 Capybara 启动一个测试服务器,并可以通过打开或关闭无头选项来选择是否显示使用 capybara 3.35.3 和 cuprite 0.13 的 chrome 上的案例。
我的发现和问题:
理想情况下,不要定义Capybara.server_host 或Capybara.server_port,而是使用Capybara.always_include_port = true,根据Capybara 的文档,这意味着在测试用例中使用访问时始终将端口发送或附加到服务器主机地址,浏览器中的网址为http://127.0.0.1:xxxx/。这种方法的问题是Capybara.always_include_port 没有这样做,而是在服务器运行后,浏览器转到http://127.0.0.1/
如果我设置Capybara.server_port,无论Capybara.always_include_port 的状态如何,浏览器在bundle exec rspec 上仍然没有端口。
作为参考,我在每个案例之前使用CAPYBARA_APP_HOST和host!而不使用通用Capybara.app_host的原因是因为Rails自动将后者的值更改为127.0.0.1,所以这更像是一个工作大约是从 evilmartians 那里获得的。
注释的代码行是为了展示我提到的观点。
值得注意的是,当前环境工作的唯一方法是如果我设置 Capybara.run_server = false ,并取消注释 server_host、server_port、CAPYBARA_APP_HOST 和 host! 行,并使用 @ 启动单独的 rails 服务器987654338@ 然后运行规范,不太理想。
任何指针?谢谢
我的 rails_helper.rb:
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'capybara/rails'
require "capybara/cuprite"
Dir[File.join(__dir__, "system/support/**/*.rb")].sort.each { |file| require file }
Capybara.default_driver = Capybara.javascript_driver = Capybara.current_driver = :cuprite
Capybara.default_max_wait_time = 5
Capybara.default_normalize_ws = true
Capybara.server = :puma
Capybara.always_include_port = true
# Capybara.server_host = '0.0.0.0'
# Capybara.server_port = 3030
# CAPYBARA_APP_HOST = "http://#{Capybara.server_host}:#{Capybara.server_port}".freeze
Capybara.register_driver(:cuprite) do |app|
Capybara::Cuprite::Driver.new(
app,
**{
window_size: [1200, 800],
browser_options: {},
process_timeout: 10,
inspector: true,
headless: !ENV["HEADLESS"].in?(%w[n 0 no false])
}
)
end
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/factories"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
config.prepend_before(:each, type: :system) do
# host! CAPYBARA_APP_HOST
# Use JS driver always
driven_by Capybara.javascript_driver
end
end
【问题讨论】:
标签: ruby-on-rails rspec capybara cuprite