路由存在 - 测试认为它不存在
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');
});
}
}
可能有更好的方法来做到这一点,但这只是我现在想到的。
我有一条路线在我的 "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');
});
}
}
可能有更好的方法来做到这一点,但这只是我现在想到的。