我想在运行Capybara测试时调整puma配置。更改.env,.env.test(我使用dotenv)或config / puma.rb中的设置无效。
我在哪里可以更改配置?
Rails 5.1,poltergeist 1.15.0,capybara 2.14.0,puma 2.8.2
答案 0 :(得分:12)
通常在Capybara中,您可以在register_server块中配置服务器。 :puy服务器定义Capybara提供的是
Capybara.register_server :puma do |app, port, host|
require 'rack/handler/puma'
Rack::Handler::Puma.run(app, Host: host, Port: port, Threads: "0:4")
end
如果你正在使用Rails 5.1系统测试,那么在它之上添加了一层抽象,服务器配置在 ActionDispatch :: SystemTesting :: Server#register定义为
def register
Capybara.register_server :rails_puma do |app, port, host|
Rack::Handler::Puma.run(app, Port: port, Threads: "0:1")
end
end
无论哪种方式,您都应该能够覆盖当前服务器注册之一
Capybara.register_server :rails_puma do |app, port,host|
Rack::Handler::Puma.run(app, ...custom settings...)
end
或配置您自己的
Capybara.register_server :my_custom_puma do |app, port, host|
Rack::Handler::Puma.run(app, ...custom settings...)
end
Capybara.server = :my_custom_puma
答案 1 :(得分:2)
在ApplicationSystemTestCase
中,您可以通过将options
传递给:puma
中Rails使用的默认setup
服务器来进行配置。
AFAIK,这适用于任何选项,但我只用
Silent: true
使puma启动输出静音Thread: '1:1'
将puma进程配置为仅使用一个线程这是我设置Rails系统测试以在docker容器中运行的方式:
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { url: "http://selenium:4444/wd/hub" }
def setup
Capybara.server_host = '0.0.0.0' # bind to all interfaces
Capybara.server = :puma, { Silent: true, Threads: '1:1' }
host! "http://#{IPSocket.getaddress(Socket.gethostname)}"
super
end
end