Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to dump all Mojolicious routes?

Full Mojolicious application have routes command which will dump application routes:

script/my_app.pl routes

How can I do same thing from testing script for Lite application?

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?
like image 585
Eugen Konkov Avatar asked Oct 17 '22 19:10

Eugen Konkov


1 Answers

A Mojolicous::Lite app is a fully fledged Mojolicious application, just with more convenient syntax.

  • You can use /app.pl routes to print routes on the command line for Lite apps as well.

  • You can programmatically access the routes via the app->routes object, which is a Mojolicious::Routes object that contains individual Mojolicious::Routes::Route objects.

Unfortunately, the Routes object does not document an API for enumerating all routes. You will therefore have to traverse the route tree yourself. The corresponding source code for the Mojolicious::Command::routes command is rather convoluted. Alternatively, you can ->find($name) specific routes by name.

The app is accessible from a Test::Mojo object as $test->app. Note that the docs for that method include a test that verifies routing:

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

Note that you must initialize the test object with the app name, or assign it an app instance later in order to access the app through the test object.

like image 145
amon Avatar answered Nov 15 '22 11:11

amon