NoMethodError: Puma::Events:Class 的未定义方法"字符串"



我正在运行一个非常简单的测试,它需要javascript,只是为了检查索引加载和元素是否存在,比如:

class ProfitsTest < ApplicationSystemTestCase
setup do
@admin = users(:admin)
@admin.confirm
sign_in @admin
end
test 'visiting the index' do
# Index only test
visit profits_url
assert_selector 'h1', text: '計算表'
end
end

我对水豚的配置是这样的(只是去掉了彪马的启动日志(:

require 'test_helper'
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :headless_chrome # :chrome
Capybara.server = :puma, { Silent: true }
Selenium::WebDriver.logger.ignore(:browser_options)
end

这是我得到的错误:

#<Thread:0x000000010f82b2d8 /Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/server.rb:76 run> terminated with exception (report_on_exception is true):
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/registrations/servers.rb:32:in `block in <main>': undefined method `strings' for Puma::Events:Class (NoMethodError)
events = conf.options[:Silent] ? ::Puma::Events.strings : ::Puma::Events.stdio
^^^^^^^^
from /Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/config.rb:64:in `block in server='
from /Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/server.rb:77:in `block in boot'
E
Error:
ProfitsTest#test_visiting_the_index:
NoMethodError: undefined method `strings' for Puma::Events:Class
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/registrations/servers.rb:32:in `block in <main>'
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/config.rb:64:in `block in server='
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/server.rb:77:in `block in boot'
Error:
ProfitsTest#test_visiting_the_index:
NoMethodError: undefined method `strings' for Puma::Events:Class
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/registrations/servers.rb:32:in `block in <main>'
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/config.rb:64:in `block in server='
/Users/cody/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/capybara-3.37.1/lib/capybara/server.rb:77:in `block in boot'

rails test test/system/profits_test.rb:20

我想我有一个错误要调试,但记录器不工作?如果我将Silent: true更改为Silent: False,它将为stdio提供相同的无方法错误。那彪马一定出了什么问题?我使用的是铁轨(6.1.7(、美洲狮(6.0.0(和水豚(3.37.1(。

我被难住了。

Capybara的发布版本不支持彪马6。您可以使用Capybara的master分支,使用Puma 5.x,或者编写自己的服务器注册配置。

我也有同样的问题,只是暂时将彪马降级到5.x版本。如果您也使用capistrano3-puma,请将其降级为5.x。

更新capybara-gem,我已经从3.37.1更新到3.38.0,它修复了问题