Где тестировать маршруты в рубине на рельсах - PullRequest
17 голосов
/ 13 марта 2011

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

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

Дополнение:

Точнее, где применяются утверждения, описанные на направляющих и на API ?

Ответы [ 5 ]

15 голосов
/ 13 апреля 2011

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

10 голосов
/ 13 марта 2011

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

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

6 голосов
/ 16 февраля 2015

Я предлагаю вам создать тестовый файл для маршрутов в папке test / controllers .

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.

2 голосов
/ 01 февраля 2012

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

require 'test_helper'

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

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

0 голосов
/ 05 ноября 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...