Подтвердить что ты не робот

Где тестировать маршруты в рубине на рельсах

Где тестировать маршруты в рубине на рельсах?

  • модульные тесты?
  • функциональные тесты?
  • интеграционные тесты?

Дополнение:

Точнее, где применять утверждения, описанные в руководствах и on апи?

4b9b3361

Ответ 1

Маршруты должны выполняться как часть интеграционных тестов. Тестирование интеграции - это то, где вы тестируете важные рабочие потоки вашего приложения - более конкретно, определяется ли 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 ошибках.

Ответ 2

Почему вы чувствуете необходимость проверки маршрутов? Чисто убедиться, что маршруты, определенные в ваших маршрутах .rb, действительно работают? Если да, то нет. Это не задача ваших приложений, чтобы убедиться, что внутренняя среда фреймворка работает правильно, - что задание собственных тестов Rails.

Если у вас есть какой-то динамический/определяемый пользователем маршрут, который вы хотите протестировать, я бы, вероятно, пошел с интеграцией.

Ответ 3

Я предлагаю вам создать тестовый файл для маршрутов в вашей папке 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.

Ответ 4

Согласно комментарию в этой ошибке рельсов, надлежащее место находится в функциональном тесте. Если вы попытаетесь протестировать их в тесте интеграции, маршруты, которые вы установили в routes.rb, не будут доступны.

require 'test_helper'

class FooControllerTest < ActionController::TestCase
  test "foo routes" do
    assert_recognizes({:controller => 'foo_controller', :action => 'list'}, '/foos'
  end
end

Маршрутные тесты - это хорошие места для перечисления ссылок, которые существуют в дикой природе, и избегать непреднамеренного нарушения их с изменением кода. Немного странно, что тесты привязаны к контроллеру, так как это маршрут, заданный в целом, вы на самом деле тестируете, но я не слышал о "испытании набора маршрута".

Ответ 5

Если вы используете rspec, самое естественное место для тестов маршрутизации находится в каталоге spec/routing. Из Документация Rspec:

Спецификации маршрутизации отмечены :type => :routing или если вы установили config.infer_spec_type_from_file_location!, помещая их в spec/routing.