【问题标题】:Laravel Unit Tests not finding custom namespaceLaravel 单元测试未找到自定义命名空间
【发布时间】: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 自动加载并且没有任何答案。

【问题讨论】:

    标签: laravel-5 phpunit


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 2015-09-15
      • 2020-07-27
      • 2015-03-06
      • 1970-01-01
      • 2021-09-07
      • 2016-03-16
      • 1970-01-01
      • 2014-04-05
      相关资源
      最近更新 更多