Почему не работает '/ foo' в функциональном тесте в Rails 3?

Просмотр руководств по Rails http://guides.rubyonrails.org/testing.html#integration-testing-examples и этот вопрос SO Rails Functional Проверка произвольных или настраиваемых URL-адресов, в тесте должно работать следующее:

require 'test_helper'
class ApplicationControllerTest < ActionController::TestCase
  test "test authentication" do
    get "/dash"
    assert_response :success
  end
end

Но я получаю сообщение об ошибке: ActionController::RoutingError: No route matches {:controller=>"application", :action=>"/dash"}

Мой маршрут настроен и работает по следующему URL-адресу: http://localhost:3000/dash

Это маршрут:

dash     /dash(.:format)   {:action=>"population", :controller=>"dashboard"}

Почему бы get с URL-адресом не работать?

Я запускаю этот тест из class ApplicationControllerTest < ActionController::TestCase, который отличается от контроллера приборной панели. Надо ли запускать его из одноименного функционального теста, что и контроллер?

Работа в Rails 3.07 с использованием Test :: Unit.


person B Seven    schedule 02.10.2011    source источник
comment
getpost и т. Д.) В функциональных тестах всегда ожидают имени действия.   -  person Marian Theisen    schedule 03.10.2011


Ответы (1)


Да, вам нужно запустить его из функционального теста для этого конкретного контроллера. Rails пытается быть полезным, поэтому он автоматически выбирает, на какой контроллер он отправляет запрос, на основе имени тестового класса.

Возможно, вам также потребуется прислушаться к совету Мэриан и использовать имя действия, а не URL-адрес:

get :population

И обратите внимание, что вспомогательные функции get / post / и т. Д. Ведут себя совершенно по-разному в тестах интеграции (я считаю, что там ваш код будет правильным) - вероятно, именно здесь вы и зависаете. Меня тоже раздражает эта непоследовательность ...

Надеюсь, это поможет!

person Xavier Holt    schedule 02.10.2011