Rails 6 - 由于 ActionPack .empty 导致测试失败? nil:NilClass

Rails 6 - tests failing due to ActionPack .empty? for nil:NilClass

我最近将我的 rails 应用程序从 6.0.0.beta3 升级到 6.0.0 并且我所有使用路由 _path_url 的测试我得到了以下错误:

HomeControllerTest#test_should_see_home_page:
NoMethodError: undefined method `empty?' for nil:NilClass
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/routing/route_set.rb:781:in `optimize_routes_generation?'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/routing/url_for.rb:220:in `optimize_routes_generation?'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/routing/route_set.rb:228:in `optimize_routes_generation?'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/routing/route_set.rb:198:in `call'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/routing/route_set.rb:329:in `block in define_url_helper'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/testing/integration.rb:404:in `public_send'
    /.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/testing/integration.rb:404:in `method_missing'
    /code/events/test/controllers/home_controller_test.rb:6:in `block in <class:HomeControllerTest>'

有人看过这个吗?也许我在升级过程中错过了配置?我的应用程序在浏览器中运行良好,似乎受影响的是测试。

编辑

我运行的命令是:

BACKTRACE=YES rails test test/controllers/home_controller_test.rb

而且测试很简单,总是在路由线上失败:

require 'test_helper'

class HomeControllerTest < ActionDispatch::IntegrationTest

  test "should see home page" do
    get root_path
    assert_response :success
  end

end

尝试 运行 单个规范文件而不是所有 - 如果我们不 运行 特定测试

有时错误消息会令人困惑

好的。我终于找到了问题所在。在我的 environment.rb 文件中,我正在执行以下操作

App::Application.default_url_options = App::Application.config.action_mailer.default_url_options

因为它们都使用相同的设置。我这样做是因为我在我的模型中使用路由助手 (XX_path / XX_url)。我没有在我的 environment/test.rb 文件中设置 action_mailer.default_url_options,这就是我的路线中断的原因。现在我在分配 App::Application.default_url_options 之前检查 env 是否处于测试模式,因为测试会自动使用 http://www.example.com 作为 url 选项.