Тестирование маршрутов рельсов: не удается найти методы ActionController :: Assertions :: RoutingAssertions - PullRequest
2 голосов
/ 27 ноября 2009

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

rake test:units завершается с ошибкой:

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. Я не думаю, что мне нужно включать эти модули в мои тесты. Что здесь может быть не так?

Ответы [ 3 ]

5 голосов
/ 28 ноября 2009

Маршрутные тесты должны выполняться как часть интеграционных тестов.

Они могут быть сгенерированы с использованием script/generate script/generate integration_test routes

Пример:

class RoutesTest < ActionController::IntegrationTest
  fixtures :all

  def test_resources_route
    assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
  end
end
5 голосов
/ 11 января 2010

Есть список обновлений Rails gotchas на гигантских роботах. Видимо, ваш тест маршрутизации должен использовать класс ActionController::TestCase, а не ActiveSupport::TestCase.

0 голосов
/ 27 ноября 2009

Ваш тестовый файл модуля маршрутизации должен включать модуль ActionController::Assertions::RoutingAssertions начиная с Rails 2.3.2.

...