路由存在 - 测试认为它不存在

Route Exists - Testing thinks it doesn't

我有一条路线在我的 "local" 环境中运行良好,但是当我转到 运行 时,我的单元测试失败,说找不到路线。我已经用 php artisan tinker --env=testing 进行了测试,我可以从那里执行路由。

关于为什么会发生这种情况有什么想法吗?

➜  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"

这是我 运行 我的测试用例时得到的结果。

➜  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.

使用 PHPUnit,无法在单独的文件中定义路由并将其包含在 routes.php 文件中。您可以在 RouteServiceProvider.php 中添加一个额外的呼叫或为额外的路由创建一个新的服务提供商。

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');
    });
}
}

可能有更好的方法来做到这一点,但这只是我现在想到的。