Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Route Exists - Testing thinks it doesn't

I have a route which works fine in my "local" environment, however when I go to run my unit tests it fails saying that it cannot find the route. I have tested with php artisan tinker --env=testing and i can execute the route from there just fine.

Any thoughts as to why this might be happening?

➜  l5_media_communities git:(laravel-5.2-testing) ✗ php artisan tinker --env=testing
Psy Shell v0.7.2 (PHP 5.6.10 — cli) by Justin Hileman
>>> env
Current application environment: testing
>>> route('groups.media.show', [6, 'this-is-a-slug']);
=> "http://localhost/groups/6/media/this-is-a-slug"

This is what I get when I run my test case.

➜  l5_media_communities git:(laravel-5.2-testing) ✗ phpunit
PHPUnit 5.2.10 by Sebastian Bergmann and contributors.

..E..                                                               5     / 5 (100%)

Time: 2.74 seconds, Memory: 36.00Mb

There was 1 error:

1) UserEmailNotificationsTest::testActiveFollowerReceivesNewCommentEmailNotification
ErrorException: Route [groups.media.show] not defined. (View: /Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/resources/views/emails/notifications/new-comment-owner.blade.php)

/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:307
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:44
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:59
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:147
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:118
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:83
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/InlineEmail.php:30
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/mailer.php:261
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/mailer.php:203
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/Listeners/NotificationEventListener.php:43
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/tests/UserEmailNotificationsTest.php:132

Caused by
InvalidArgumentException: Route [groups.media.show] not defined.

/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:307
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:616
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/storage/framework/views/d1c9c8d779082ca7537ef8f0e752ed02afc0753e.php:2
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:42
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:59
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:147
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:118
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/View/View.php:83
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/InlineEmail.php:30
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/mailer.php:261
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/library/mailer.php:203
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/app/Listeners/NotificationEventListener.php:43
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/tests/UserEmailNotificationsTest.php:132

FAILURES!
Tests: 5, Assertions: 4, Errors: 1.
like image 260
Joseph Crawford Avatar asked Dec 13 '25 02:12

Joseph Crawford


1 Answers

With PHPUnit, routes cannot be defined in a separate and included within the routes.php file. You are able to add an additional call in RouteServiceProvider.php or create a new service provider for additional routing.

class RouteServiceProvider extends ServiceProvider
{
/**
 * This namespace is applied to the controller routes in your routes file.
 *
 * In addition, it is set as the URL generator's root namespace.
 *
 * @var string
 */
protected $namespace = 'App\Http\Controllers';

/**
 * Define your route model bindings, pattern filters, etc.
 *
 * @param  \Illuminate\Routing\Router  $router
 * @return void
 */
public function boot(Router $router)
{
    //

    parent::boot($router);
}

/**
 * Define the routes for the application.
 *
 * @param  \Illuminate\Routing\Router  $router
 * @return void
 */
public function map(Router $router)
{
    $router->group(['namespace' => $this->namespace], function ($router) {
        require app_path('Http/routes.php');
    });

    /* Additional route file */
    $router->group(['namespace' => $this->namespace], function ($router) {
        require app_path('Http/additional_routes.php');
    });
}
}

There may be better ways to do this, but this is just what I came up with for now.

like image 187
John Shields Avatar answered Dec 15 '25 16:12

John Shields



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!