Rails 6 - тесты не пройдены из-за ActionPack .empty? для ноля: NilClass - PullRequest
0 голосов
/ 25 октября 2019

Я недавно обновил свое приложение 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

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

OK. Я наконец нашел проблему. В моем файле environment.rb я делаю следующее

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

, поскольку они оба используют одинаковые настройки. Я делаю это так же, как использую помощники маршрута в моих моделях (XX_path / XX_url). Я не устанавливал action_mailer.default_url_options в моем environment/test.rb файле, и поэтому мои маршруты ломались. Теперь я проверяю, находится ли env в тестовом режиме, прежде чем присваивать App::Application.default_url_options, так как тесты автоматически используют http://www.example.com в качестве параметров URL.

0 голосов
/ 27 октября 2019

Попробуйте запустить один файл спецификаций вместо всех - иногда сообщение об ошибке сбивает с толку, если мы не запускаем определенный тест

...