Тестирование маршрутов рельсов: не удается найти методы ActionController :: Assertions :: RoutingAssertions
-
05-07-2019 - |
Вопрос
Я пытаюсь проверить маршруты в моем приложении rails 2.3.4. Есть несколько сайтов, которые объясняют, как тестировать маршруты, включая документацию по rails, но я получаю ошибки, следуя инструкциям.
Во-первых, я предполагаю, что эти тесты можно выполнить в связанных файлах модульных тестов. Кажется, нет более очевидного места, и ни один из документов не указывает.
Тем не менее, это сокращенная версия test / unit / TitlesTest.rb
require File.dirname(__FILE__) + '/../test_helper'
class TitleTest < Test::Unit::TestCase
# include ActionController::Assertions::RoutingAssertions
def test_routes
assert_routing "games", { :controller => "titles", :section => "games", :action => "index", :id => nil }
end
end
тест рейка: юниты
завершается с ошибкой:
NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
/test/unit/title_test.rb:7:in `test_routes'
Я видел в Rails API, что assert_routing определен в ActionController :: Assertions :: RoutingAssertions
, поэтому я попытался включить этот модуль только для того, чтобы он не работал в другом месте.
Обратите внимание на прокомментированную строку include
в приведенном выше примере кода.
NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
/test/unit/title_test.rb:7:in `test_routes'
clean_backtrace
- это еще один метод тестирования, определенный в ActionController :: TestCase :: Assertions.
Я не получаю никаких результатов поиска Google по этим ошибкам - похоже, ни у кого больше нет этой проблемы. Проблема также возникает, если я воссоздаю сценарий в недавно сгенерированном приложении rails. Я не думаю, что мне нужно включать эти модули в мои тесты. Что здесь может быть не так?
Решение
Существует список обновлений Rails gotchas О гигантских роботах. Видимо, ваш тест маршрутизации должен использовать класс ActionController :: TestCase
, а не ActiveSupport :: TestCase
.
Другие советы
Тесты маршрутизации должны выполняться как часть интеграционных тестов.
Их можно сгенерировать с помощью script / generate script / генерация интеграционных маршрутов
Пример:
class RoutesTest < ActionController::IntegrationTest
fixtures :all
def test_resources_route
assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
end
end
Ваш тестовый файл модуля маршрутизации должен включать модуль ActionController :: Assertions :: RoutingAssertions
начиная с Rails 2.3.2.