Почему не работает '/ foo' в функциональном тесте в Rails 3? - PullRequest
1 голос
/ 03 октября 2011

Если посмотреть на руководства Rails http://guides.rubyonrails.org/testing.html#integration-testing-examples и этот вопрос SO Функциональный тест Rails для произвольных или пользовательских 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.

1 Ответ

2 голосов
/ 03 октября 2011

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

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

get :population

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

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

...