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

mud*_*udl 7 ruby-on-rails capybara puma

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

\n
class ProfitsTest < ApplicationSystemTestCase\n  setup do\n    @admin = users(:admin)\n    @admin.confirm\n    sign_in @admin\n  end\n\n  test 'visiting the index' do\n    # Index only test\n    visit profits_url\n    assert_selector 'h1', text: '\xe8\xa8\x88\xe7\xae\x97\xe8\xa1\xa8'\n  end\nend\n
Run Code Online (Sandbox Code Playgroud)\n

我的水豚配置如下(只是删除 Puma 启动日志):

\n
require 'test_helper'\n\nclass ApplicationSystemTestCase < ActionDispatch::SystemTestCase\n  driven_by :selenium, using: :headless_chrome # :chrome\n  Capybara.server = :puma, { Silent: true }\n  Selenium::WebDriver.logger.ignore(:browser_options)\nend\n
Run Code Online (Sandbox Code Playgroud)\n

这是我收到的错误:

\n
#<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):\n/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)\n\n  events = conf.options[:Silent] ? ::Puma::Events.strings : ::Puma::Events.stdio\n                                                 ^^^^^^^^\n    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='\n    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'\nE\n\nError:\nProfitsTest#test_visiting_the_index:\nNoMethodError: undefined method `strings' for Puma::Events:Class\n    /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>'\n    /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='\n    /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'\n\nError:\nProfitsTest#test_visiting_the_index:\nNoMethodError: undefined method `strings' for Puma::Events:Class\n    /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>'\n    /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='\n    /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'\n\n\nrails test test/system/profits_test.rb:20\n
Run Code Online (Sandbox Code Playgroud)\n

我想我有一个错误需要调试,但记录器无法工作?如果我更改Silent: trueSilent: False,它会给我同样的无方法错误stdio。那么 Puma 一定出了什么问题吗?我正在使用 Rails (6.1.7)、puma (6.0.0) 和 capybara (3.37.1)。

\n

我很困惑。

\n

Tho*_*ole 9

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

\n


Lev*_*sky 3

更新capybaragem,我已从 3.37.1 更新到 3.38.0,它解决了问题