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 选项.
我最近将我的 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 选项.