【问题标题】:Rails tests are using server in development modeRails 测试在开发模式下使用服务器
【发布时间】:2017-10-12 09:53:53
【问题描述】:

我刚刚设置了 Puma,它作为开发服务器运行良好。

当我运行集成测试时,Puma 以开发模式启动,而不是测试模式。

宝石文件

group :test do
  gem puma
end

test/test_helper.rb

class ActionDispatch::IntegrationTest
  require 'rack/handler/puma'
  Capybara.server = :puma
  Capybara.register_server("puma") do |app, port|
    server = Puma::Server.new(app)
    server.add_tcp_listener(Capybara.server_host, port)
    server.run
  end
end

测试:

✗ RAILS_ENV="test" ruby -I test test/integration/computers_test.rb -n /polt/
Started with run options -n /polt/ --seed 3050
Puma starting in single mode...
* Version 3.8.2 (ruby 2.3.1-p112), codename: Sassy Salamander
* Min threads: 0, max threads: 4
* Environment: development
* Listening on tcp://127.0.0.1:49875
Use Ctrl-C to stop
...

【问题讨论】:

  • 什么对你有用?
  • @ZedTuX 不幸的是我不记得了。我不认为这是下面的答案之一,但这也是 2.5 年前的情况。
  • 好的,感谢您的评论。

标签: ruby-on-rails ruby-on-rails-4 puma


【解决方案1】:

当您运行 rake test 时是否会发生相同的行为?

我会确保在您的 config/puma.rb 文件中(如果没有,请创建一个)您有类似 environment ENV.fetch("RAILS_ENV") { "development" } 的行 - 如果没有它,我会看到与您相同的行为。

【讨论】:

  • 这在 Rails 5.1 系统测试中对我不起作用。
【解决方案2】:

您需要将RACK_ENV 设置为RAILS_ENV 为:

RACK_ENV="test" RAILS_ENV="test" ruby -I test test/integration/computers_test.rb -n /polt/

那么puma服务器会使用测试环境:

* Min threads: 0, max threads: 4
* Environment: test
* Listening on tcp://127.0.0.1:49875

【讨论】:

    【解决方案3】:

    添加

    ENV["RAILS_ENV"] = "test"
    ENV["RACK_ENV"] = "test"
    

    在您的测试文件中,在所有测试之前。

    这实际上类似于@ZedTuX 的答案,但我不能在那里发表评论。

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多