Функциональный тест Rails произвольных или пользовательских URL-адресов
у меня есть ресурс RESTful в моем приложении Rails под названием "Фото". Я использую скрепки для обслуживания различных "стилей" моих фотографий (для эскизов и тому подобное), и я использую пользовательский маршрут для спокойного доступа к этим стилям:
map.connect "photos/:id/style/*style", :controller => "photos", :action => "show"
это работает нормально, но я хочу написать тест, чтобы убедиться, что он остается таким образом.
у меня уже есть функциональный тест для вызова показать действие контроллера фото (формируется на эшафот в факт):
test "should show photo" do
get :show, :id => photos(:one).to_param
assert_response :success
end
это проверяет выполнение действия по URL-адресу "/ photo / 1". Теперь я хочу проверить выполнение URL-адреса "/ photo/1/style / foo". К сожалению, я не могу заставить ActionController:: TestCase поразить этот URL-адрес; метод get всегда хочет действие/id и не принимает суффикс URL.
как я могу проверить пользовательский URL-адрес?
обновление
при проверке ответа @fernyb я нашел этот фрагмент в то же RDoc документации
в тестах вы можете просто передать URL или именованный маршрут, чтобы получить или опубликовать. def send_to_jail получить '/тюрьма' assert_response: успех assert_template " тюрьма / фронтальная" конец
однако, когда я на самом деле попробовать этого, я получаю сообщение об ошибке:
test "should get photo" do
get "/photos/1/style/original"
assert_equal( "image/jpeg", @response.content_type )
end
ActionController::RoutingError: No route matches {:action=>"/photos/1/style/original", :controller=>"photos"}
интересно, я делаю что-то не так.
2 ответов
использовать assert_routing
чтобы проверить маршруты:
assert_routing("/photos/10/style", :controller => "photos", :action => "show", :id => "10", :style => [])
assert_routing("/photos/10/style/cool", :controller => "photos", :action => "show", :id => "10", :style => ["cool"])
assert_routing("/photos/10/style/cool/and/awesome", :controller => "photos", :action => "show", :id => "10", :style => ["cool", "and", "awesome"])
в своем интеграционного тестирования затем вы можете сделать:
test "get photos" do
get "/photos/10/style/cool"
assert_response :success
end
маршрут подстановка
задание
*[string]
как часть a правило вроде:map.connect '*path' , :controller => 'blog' , :action => 'unrecognized?'
будет Глоб все остальные части маршрут, который не был распознан ранее. Значения globbed в
params[:path]
как массив пути сегменты.
таким образом, похоже, вам нужно пройти :path
аргументы, чтобы проверить действие.