Как я могу протестировать Rails Routes с помощью Minitest?

Я пытаюсь использовать Minitest для существующего приложения Rails (3.2), но мне не удается запустить тесты маршрутизации. Я пробовал синтаксис rspec (следует route_to) и синтаксис TestUnit (assert_routing), но безуспешно.

Любые советы о том, как заставить это работать? Конкретные модули, которые мне нужно включить, и т. д.?

спасибо


person doublea    schedule 08.07.2012    source источник


Ответы (2)


Если вы используете minitest-rails, вы можете создать тесты маршрута, поместив в test/routes/homepage_test.rb следующее:

require "minitest_helper"

class HomepageRouteTest < ActionDispatch::IntegrationTest
  def test_homepage
    assert_routing "/", :controller => "home", :action => "index"
  end
end

В качестве альтернативы вы можете использовать Minitest Spec DSL:

require "minitest_helper"

describe "Homepage Route Acceptance Test" do
  it "resolves the homepage" do
    assert_routing "/", :controller => "home", :action => "index"
  end
end

Вы можете запустить эти тесты со следующей задачей rake:

rake minitest:routes
person blowmage    schedule 27.07.2012
comment
Я получаю сообщение об ошибке undefined method `assert_routing' для #‹#‹Class:0x007fc6a30d6c60›:0x007fc6a4f7bc60› при использовании assert_routing. Есть ли шаг, который мне нужно изменить в файле minitest_helper, чтобы заставить его работать? - person chourobin; 04.12.2012
comment
cr45: вам нужно либо убедиться, что ваш тестовый класс наследуется от MiniTest::Rails::ActionDispatch::IntegrationTest, либо, если вы используете спецификацию DSL, описание верхнего уровня должно заканчиваться интеграционным тестом или приемочным тестом. - person blowmage; 05.12.2012
comment
@blowmage все еще полезно писать такие тесты маршрутизации с Rails 4.1 и MiniTest? stackoverflow.com/questions/24937110/ - person pdobb; 04.09.2014
comment
@pdobb Я никогда не утверждал, что это полезно. Возможно. Я полагаю, что если у вас есть внешняя зависимость от определенных существующих маршрутов, то стоит написать эти тесты. Это просто зависит от ваших потребностей. - person blowmage; 04.09.2014

Ответ @blowmage помог мне, но похоже, что синтаксис немного изменился.

С рельсами 4:

require "test_helper"

class HomepageRouteTest < ActionDispatch::IntegrationTest
  def test_messages
    assert_generates '/messages', :controller => "messages", :action => "index"
  end
end
person Dustin    schedule 16.01.2014
comment
Rails предоставляет вам три утверждения для проверки маршрутов: assert_routing, assert_recognizes, и assert_generates. Используйте утверждение, которое лучше всего соответствует тому, что вы пытаетесь проверить. - person blowmage; 04.09.2014