Как сбросить все маршруты Mojolicious?

Полное приложение Mojolicious имеет команду routes, которая выгружает маршруты приложений:

script/my_app.pl routes

Как я могу сделать то же самое из сценария тестирования для приложения Lite?

use Mojo::Base -strict;
use Test::Mojo;
use Test::More;

use Mojolicious::Lite;

... # Routes defined here

my $t = Test::Mojo->new;

$t->dump_all_routes # What should I do here?

person Eugen Konkov    schedule 26.04.2018    source источник


Ответы (1)


Приложение Mojolicous::Lite — это полноценное приложение Mojolicious, только с более удобным синтаксисом.

  • Вы также можете использовать /app.pl routes для печати маршрутов в командной строке для приложений Lite.

  • Вы можете программно получить доступ к маршрутам через объект app->routes, который представляет собой Mojolicious::Routes, который содержит отдельные Mojolicious::Routes::Route объекты.

К сожалению, объект Routes не документирует API для перечисления всех маршрутов. Поэтому вам придется самостоятельно пройтись по дереву маршрутов. Соответствующий исходный код для команды Mojolicious::Command::routes довольно запутан. Кроме того, вы можете ->find($name) указать конкретные маршруты по имени.

Приложение доступно из объекта Test::Mojo как $test->app. Обратите внимание, что документы для этого метода включают тест, который проверяет маршрутизацию:

ok $t->app->routes->find('echo')->is_websocket, 'WebSocket route';

Обратите внимание, что вы должны инициализировать тестовый объект именем приложения или позже назначить ему экземпляр приложения, чтобы получить доступ к приложению через тестовый объект.

person amon    schedule 26.04.2018