【问题标题】:Rails 5: Using Capybara with Phusion PassengerRails 5:将 Capybara 与 Phusion 乘客一起使用
【发布时间】:2018-12-15 11:13:20
【问题描述】:

我正在尝试在 Rails 5 应用程序上运行规范。但是,我看到以下 LoadError:

失败/错误:引发 LoadError,'Capybara 无法加载 puma for 它的服务器,请将puma 添加到您的项目或指定一个不同的 通过Capybara.server = :webrick之类的服务器。'

我将passenger gem 用于生产服务器。有没有办法让我也可以使用乘客进行 Capybara 测试? 提前致谢

【问题讨论】:

  • 只是猜测。 Capybara.server = :passenger 在您的 rails_helper 中?见:github.com/teamcapybara/capybara#setup
  • 这会导致错误,Failure/Error: Capybara.server.call(middleware, port, host), NoMethodError: undefined method call' for nil:NilClass` 所以我认为这不是我可以传递给 Capybara.server 的符号 :(
  • 看起来 puma 是你唯一的选择。尝试将其添加到 Gemfile 中的测试组。可能还必须将乘客转移到您的生产组中。

标签: ruby-on-rails rspec capybara passenger


【解决方案1】:

如果您真的想在测试时使用乘客来运行您的应用程序,您需要使用 rails 测试环境(因此它使用测试数据库等)与乘客分开启动您的应用程序,然后设置

Capybara.run_server = false
Capybara.app_host = "http://<wherever the app is accessible>"

为您的测试。这告诉 Capybara 不要为运行应用程序本身而烦恼,只需连接到您已经在运行的应用程序即可。您还需要使用 database_cleaner 之类的东西来处理测试之间的数据库重置,并非常小心以确保在每次测试结束时没有任何剩余的请求在运行。

当使用pumawebrick 运行测试时,这些都不是必需的(rails puma 或webrick 进行测试,您将获得更流畅的体验。

【讨论】:

  • 我已将乘客添加到生产组,只是坚持使用 puma 进行开发和测试。我很惊讶乘客文档默认情况下并没有说这样做,因为它本质上与标准 Rails 测试工具不兼容。
【解决方案2】:

我认为你不能这样做:

capybara documentation:

This block takes a rack app and a port and returns a 
rack server listening on that port

来自passenger repo

This is fundamentally incompatible with Phusion Passenger's model. 
Such a Rack handler implies a single application and a single process.
Phusion Passenger runs multiple processes which can even serve multiple 
applications.

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2010-11-23
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多