класс не найден при модульном тестировании пользовательского модуля - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь написать тесты для пользовательского модуля, который я написал для Drupal 8, и получаю сообщение об ошибке, и на данный момент у меня нет идей.Вот ошибка:

Error: Class 'Drupal\mypackage\Services\Config\MyClassServiceConfig' not found

Класс PhpUnit находится под

modules\custom\mypackage\tests\src\Unit\mypackageUserAuthTest

Вот код

class mypackageUserAuthTest extends UnitTestCase
{
    protected $user;
    protected $loginService;

    public function setUp()
    {
        parent::setUp();

        $this->loginService = new LoginService();

        $this->user = [
            'username'  => 'xxx',
            'password'  => 'xxx',
            'deviceId'  => 'xxx',
            'some-token' => 'xxx'
        ];
    }

    /** @test */
    public function that_we_can_authenticate_a_user()
    {
        $IsUserLoggedIn = $this->loginService->login($this->user['username'], $this->user['password']);

        $this->assertTrue($IsUserLoggedIn);
    }

Теперь метод login в loginService код

<?php

namespace Drupal\mypackage\Rest;

use GuzzleHttp\Exception\ClientException;

use Drupal\mypackage\Services\RestServiceFactory;
use Drupal\mypackage\Services\Config\MyClassServiceConfig;

class LoginService
{
    public function login($username, $password)
    {
        $configs = new MyClassServiceConfig(null, "mobile", "v1");
        $client  = RestServiceFactory::create($configs);

        try {
            $response = $client->post('login', [
                'json' => [
                        'username' => $username,
                        'password' => $password,
                        'deviceId' => 'onepiece',
                    ],
            ]);
            return json_decode($response->getBody(), true);
        } catch (ClientException $exception) {
            switch ($$exception->getResponse()->getStatusCode()) {
                case 402: // This only applies to co members
                    throw new SubscriptionRequiredException();
                case 403:
                    throw new BlockedAccountException();
                case 409:
                    throw new DuplicateEmailException();
                case 410:
                    throw new PasswordDoesNotExistException();
            }
            throw $exception;
        }
    }
}

pwd результат в MyClassServiceConfig каталоге классов /var/www/cms/web/modules/custom/mypackage/src/Services/Config

Но, похоже, он не работает на линии$configs = new MyClassServiceConfig(null, "mobile", "v1"); с ранее упомянутой ошибкой:

1) Drupal\Tests\mypackage\Unit\mypackageUserAuthTest::that_we_can_authenticate_a_user
Error: Class 'Drupal\mypackage\Services\Config\MyClassServiceConfig' not found

Кстати, я использую структуру проекта drupal (https://github.com/drupal-composer/drupal-project)

1 Ответ

0 голосов
/ 06 июня 2018

Итак, я потратил несколько дней на проверку пути, но мне показалось, что файлы не загружаются, поэтому я добавил пользовательский модуль к autload-dev part composer.json.

"autoload": {
    "classmap": [
        "scripts/composer/ScriptHandler.php"
    ],
    "files": ["load.environment.php"]
},
"autoload-dev": {
    "psr-4": { "Drupal\\mypackage\\": "web/modules/custom/mypackage" }
},

Теперь, по крайней мере, кажетсязагрузить модуль, поскольку я получаю другую ошибку, связанную с Drupal Container \Drupal::$container is not initialized yet. \Drupal::setContainer() must be called with a real container.

...