Тестирование маршрутов рельсов: не удается найти методы ActionController :: Assertions :: RoutingAssertions

StackOverflow https://stackoverflow.com/questions/1806351

Вопрос

Я пытаюсь проверить маршруты в моем приложении 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top