【发布时间】:2016-07-06 07:58:57
【问题描述】:
我在 Laravel 5 应用程序中有一个自定义命名空间,在我的 composer.json 中定义:
"psr-4": {
"App\\": "app/",
"JShaffstall\\CMSAuth\\": "packages/jshaffstall/CMSAuth/src"
}
我的应用中有一个用户模型,它继承自自定义命名空间中的 CMSUser:
namespace App;
use JShaffstall\CMSAuth\CMSUser;
class User extends CMSUser
{
}
运行正常的应用程序时,会找到其中的自定义类。我的理解是 phpunit 使用与应用程序相同的自动加载器,因此这些类也应该可用于测试。
但是当我运行 phpunit 并且测试会创建一个 App\User 的实例时,我收到以下错误:
.PHP Fatal error: Class 'JShaffstall\CMSAuth\CMSUser' not found in /var/www/public/packages/app/User.php on line 8
PHP Fatal error: Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException' with message 'Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable.' in /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Container/Container.php:752
Stack trace:
#0 /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Container/Container.php(633): Illuminate\Container\Container->build('Illuminate\\Cont...', Array)
#1 /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(687): Illuminate\Container\Container->make('Illuminate\\Cont...', Array)
#2 /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(154): Illuminate\Foundation\Application->make('Illuminate\\Cont...')
#3 /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(79): Illuminate\Foundation\Bootstrap\HandleExceptions->getExceptionHandler()
#4 /var/www/public/packages/vendor/laravel/fram in /var/www/public/packages/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 752
我认为这可能与 composer.json 中包含自定义命名空间的顺序有关,但交换这些并没有改变任何东西。
单元测试是否缺少查找自定义命名空间的步骤?
这似乎与以下问题类似:Laravel Unit Tests cannot find namespaced class,但该问题使用的是类映射而不是 PSR4 自动加载并且没有任何答案。
【问题讨论】: