Laravel Unit测试未找到自定义命名空间

时间:2016-03-19 15:15:52

标签: laravel-5 phpunit

我在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自动加载,并且没有任何答案。

1 个答案:

答案 0 :(得分:0)

因此,在检查了几个小时后,我发现这是由我的CMSUser类中的错误引起的。通过复制和粘贴错误,它的命名空间称它是App。一旦我解决了这个问题,PHPUnit现在可以正确地找到该类。

道德是四重检查一切,然后再做一次!