Laravel Trait未找到PHP致命错误

时间:2017-03-22 13:08:27

标签: php laravel unit-testing traits laravel-testing

我正在开发一个具有Laravel 5.3版本并使用Laravel Infyom Generator的项目,不知何故它生成了所有这些特征和其他测试文件,如(ApiTest,RepositoryTest,...等)。当我尝试运行 PHPUNIT 我收到此错误有人可以帮助我找出我收到此错误的原因吗?

PHP Fatal error:  Trait 'MakeCustomerTrait' not found in C:\Users\ahmed\dev\gamla\tests\CustomerApiTest.php on line 8

Fatal error: Trait 'MakeCustomerTrait' not found in C:\Users\ahmed\dev\gamla\tests\CustomerApiTest.php on line 8

我想开始为我的项目进行新测试我是否需要删除这些文件?因为它一直给我这个错误?

CustomerApiTest 代码的屏幕截图: enter image description here

MakeCustomerTrait

<?php

use Faker\Factory as Faker;
use App\Models\Customer;
use App\Repositories\CustomerRepository;

trait MakeCustomerTrait
{
    /**
     * Create fake instance of Customer and save it in database
     *
     * @param array $customerFields
     * @return Customer
     */
    public function makeCustomer($customerFields = [])
    {
        /** @var CustomerRepository $customerRepo */
        $customerRepo = App::make(CustomerRepository::class);
        $theme = $this->fakeCustomerData($customerFields);
        return $customerRepo->create($theme);
    }

    /**
     * Get fake instance of Customer
     *
     * @param array $customerFields
     * @return Customer
     */
    public function fakeCustomer($customerFields = [])
    {
        return new Customer($this->fakeCustomerData($customerFields));
    }

    /**
     * Get fake data of Customer
     *
     * @param array $postFields
     * @return array
     */
    public function fakeCustomerData($customerFields = [])
    {
        $fake = Faker::create();

        return array_merge([
            'name' => $fake->word,
            'address_street' => $fake->word,
            'address_zip' => $fake->word,
            'address_city' => $fake->word,
            'address_country' => $fake->word,
            'shipping_address_street' => $fake->word,
            'shipping_address_zip' => $fake->word,
            'shipping_address_city' => $fake->word,
            'shipping_address_country' => $fake->word,
            'contact_person_id' => $fake->randomDigitNotNull,
            'created_at' => $fake->word,
            'updated_at' => $fake->word
        ], $customerFields);
    }
}

1 个答案:

答案 0 :(得分:0)

实际上发生的事情是autoloader无法解析代码中的类。 Laravel使用PSR-4标准来自动加载类,这些类需要类的完全限定名称空间,这也代表保存类的文件的路径。

如果您想在以下地址的Laravel应用目录中加载一个类,请按以下方式查看:

app/repositories/users/UserRoleRepository.php

您将指定类的名称空间,例如App\repositories\users,类名为UserRoleRepository,因此自动加载器可以加载您的类。否则,您必须手动包含类的文件。

您可以在composer.json中注册自定义自动加载,并运行以下命令composer dump-autoload

您可以通过互联网like this

找到更多相关信息

希望它会有所帮助。