Класс «Безопасность» не найден при выполнении юнит-тестирования - PullRequest
0 голосов
/ 06 апреля 2020

Я открываю модульное тестирование с помощью phpunit и хочу проверить какой-то метод внутри моего сервиса.

Вот мой тестовый код, чтобы сделать это:

<?php

namespace App\Tests;

use App\Services\SortingDataSearchedProductService;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class SearchedProductTest extends WebTestCase
{

    private $sortingDataSearchedProductService;

    public function setUp()
    {
        self::bootKernel();
        $container = self::$container;
        $this->sortingDataSearchedProductService = $container->get(SortingDataSearchedProductService::class);
    }

    public function testFindStatusLinkedToGrantedRoles() {
        $grantedRolesList = [];

        $this->sortingDataSearchedProductService->findStatusLinkedToGrantedRoles($grantedRolesList);
    }

}

Но когда я попробую свой тест, вот что я получаю:

Невозможно подключить автосервис "Приложение \ Form \ CpomAf \ SearchProductType ": аргумент" $ security "метода" __construct () "ссылается на класс" Symfony \ Component \ Security \ Core \ Security ", но такой службы не существует.

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

<?php

namespace App\Services;


use App\Entity\Custom\SearchProduct;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use App\Entity\User;
use Symfony\Component\Yaml\Yaml;

/**
 * Class SortingDataSearchedProductService
 * @package App\Services
 */
class SortingDataSearchedProductService
{
    /**
     * @var Security
     */
    private $security;


    /**
     * SortingDataSearchedProductService constructor
     * @param Security $security
     */
    public function __construct(Security $security)
    {
        $this->security = $security;
    }

    /**
     * Form Data
     * @param SearchProduct $searchedData
     *
     * @return array
     */
    public function findDataOfSearchWithConditions(SearchProduct $searchedData): array
    {
        /** @var User $user */
        $user = $this->security->getUser();
        $userPermissions = $user->getPermissions();

        return $this->findStatusLinkedToGrantedRoles(
            $userPermissions
        );
    }

    /**
     * Get array of final list of granted roles
     *
     * @param array $userPermissions
     * @return array
     */
    public function findStatusLinkedToGrantedRoles(array $userPermissions): array
    {
        //Getting the list of role linked to status from yaml file
        $permissionStatusList = Yaml::parseFile(dirname(__DIR__).'/../config/roles.yaml');
        $arrayPermissionListStatus = $permissionStatusList[0];

        //Declaration array status list
        $statusList = [];

        //Getting status linked to permissions
        foreach ($userPermissions as $userPermission) {
            if (array_key_exists($userPermission, $arrayPermissionListStatus)) {
                foreach ($arrayPermissionListStatus[$userPermission] as $status) {
                    array_push($statusList, $status);
                }
            }
        }

        //Deleting double values
        return  array_values(array_unique($statusList));
    }

}

Я понимаю, что моя ошибка относится к моему файлу формы, но в сервисе я нацеливаюсь только на то, что ссылается на мою форму: $ seekData которые эти данные вернули при отправке моей формы (которую я пока не использую). Следовательно, я не уверен, почему он просматривает мой файл типа формы и почему он не рассматривает безопасность как класс.

Я пытался использовать MockBuilder в своих настройках, но это не помогло. Может быть, я неправильно использую модульное тестирование?

$this->getMockBuilder('Symfony\Component\Security\Core\SecurityContextInterface')
           ->disableOriginalConstructor()
           ->getMock();

РЕДАКТИРОВАТЬ

Вот содержимое моего файла карты автозагрузки после того, как я выполнил команду автозагрузки дампа:

    <?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Collator' => $vendorDir . '/symfony/intl/Resources/stubs/Collator.php',
    'IntlDateFormatter' => $vendorDir . '/symfony/intl/Resources/stubs/IntlDateFormatter.php',
    'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
    'Locale' => $vendorDir . '/symfony/intl/Resources/stubs/Locale.php',
    'NumberFormatter' => $vendorDir . '/symfony/intl/Resources/stubs/NumberFormatter.php',
    'SqlFormatter' => $vendorDir . '/jdorn/sql-formatter/lib/SqlFormatter.php',
);

I, если помните правильно, он восстанавливает список всех классов, которые должны быть включены в проект. Значит, это безопасность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...