Где тестировать маршруты в рубине на рельсах?
- модульные тесты?
- функциональные тесты?
- интеграционные тесты?
Дополнение:
Точнее, где применять утверждения, описанные в руководствах и on апи?
Где тестировать маршруты в рубине на рельсах?
Дополнение:
Точнее, где применять утверждения, описанные в руководствах и on апи?
Маршруты должны выполняться как часть интеграционных тестов. Тестирование интеграции - это то, где вы тестируете важные рабочие потоки вашего приложения - более конкретно, определяется ли URL-адрес или нет, как важный рабочий процесс.
Ваш интеграционный тест будет выглядеть как обычный интеграционный тест:
# /tests/integration/routes_test.rb
require 'test_helper'
class RoutesTest < ActionController::IntegrationTest
test "route test" do
assert_generates "/photos/1", { :controller => "photos", :action => "show", :id => "1" }
assert_generates "/about", :controller => "pages", :action => "about"
end
end
Что касается @jemminger ответа не тестируемых маршрутов - Хотя это тесты Rail, которые проверяют, что route.rb работает, это не ответственность Rail, чтобы проверить, http://yoursite.com/users
определяется в ваших маршрутах. Предостережение состоит в том, что большинство проверок маршрута можно было провести в существующих тестах интеграции, поэтому конкретные тесты для маршрутов могут быть избыточными.
Конкретный пример использования, о котором я могу думать, - это все люди, которые уже есть, или собираются перейти с Rails 2 на Rails 3. Код для определения маршрутов значительно изменился, и лучше узнать из тестов, что маршруты были обновлены правильно, чем от пользователей, когда они сообщают о 404 ошибках.
Почему вы чувствуете необходимость проверки маршрутов? Чисто убедиться, что маршруты, определенные в ваших маршрутах .rb, действительно работают? Если да, то нет. Это не задача ваших приложений, чтобы убедиться, что внутренняя среда фреймворка работает правильно, - что задание собственных тестов Rails.
Если у вас есть какой-то динамический/определяемый пользователем маршрут, который вы хотите протестировать, я бы, вероятно, пошел с интеграцией.
Я предлагаю вам создать тестовый файл для маршрутов в вашей папке test/controller.
class HomeRoutesTest < ActionController::TestCase
test "must route to home index" do
assert_routing '/', controller: "home", action: "index"
end
end
Было упомянуто, что они относятся к тесту интеграции. Я не согласен. Вы просто проверяете маршруты, что это. Таким образом, это скорее относится к функциональному или даже модульному тестированию вместо тестирования интеграции.
Вы можете найти ссылку в Rails RailsGuide Testing, раздел 9. Тестирование маршрутов
Интеграционные тесты для потока, где вы проверяете взаимодействие различных действий контроллера, например. выполняя бизнес-процесс, например, пользователь регистрируется, просматривает сайт и помещает элемент в корзину. При этом ваши интеграционные тесты не будут работать, если ваши маршруты не работают. Таким образом, многие говорят, что интеграционные тесты - это место, где вы проверяете маршруты. Однако, учитывая цикл разработки, вы должны сначала создать модульные тесты, тесты контроллера, тесты маршрута и т.д., Прежде чем выполнять интеграционные тесты.
И еще одно примечание: assert_routing
выполняет оба теста: assert_generates
и assert_recognizes
.
Согласно комментарию в этой ошибке рельсов, надлежащее место находится в функциональном тесте. Если вы попытаетесь протестировать их в тесте интеграции, маршруты, которые вы установили в routes.rb
, не будут доступны.
require 'test_helper'
class FooControllerTest < ActionController::TestCase
test "foo routes" do
assert_recognizes({:controller => 'foo_controller', :action => 'list'}, '/foos'
end
end
Маршрутные тесты - это хорошие места для перечисления ссылок, которые существуют в дикой природе, и избегать непреднамеренного нарушения их с изменением кода. Немного странно, что тесты привязаны к контроллеру, так как это маршрут, заданный в целом, вы на самом деле тестируете, но я не слышал о "испытании набора маршрута".
Если вы используете rspec, самое естественное место для тестов маршрутизации находится в каталоге spec/routing
. Из Документация Rspec:
Спецификации маршрутизации отмечены
:type => :routing
или если вы установилиconfig.infer_spec_type_from_file_location!
, помещая их в spec/routing.