#symfony #testing #phpunit #repository-pattern #api-platform.com
#symfony #тестирование #phpunit #репозиторий-шаблон #api-platform.com
Вопрос:
Я пишу тест для своего кода на платформе API (построенной на Symfony 5) и PHPUnit.
Я создал базовый тестовый набор с именем TestContext
that extends ApiTestCase
. Все мои классы тестов будут расширяться TestContext
для повторного использования шаблонного кода общего тестирования.
Я также пытаюсь использовать внедрение зависимостей (или расположение службы) для разрешения класса репозитория, чтобы я мог получить к ним доступ во всех дочерних классах.
Какой самый чистый, простой и практичный способ получить доступ к моим репозиториям в моих тестовых классах?
Комментарии:
1. Технически вы ищете расположение службы, а не внедрение зависимостей. Не могли бы вы обработать свою очередь редактирования, чтобы я мог отправить редактирование?
Ответ №1:
Для того, чтобы внедрить репозиторий для тестов API, у меня есть src/Test/BaseApiTest.php
namespace AppTest;
use ApiPlatformCoreBridgeSymfonyBundleTestApiTestCase;
use DoctrineORMEntityManagerInterface;
use HautelookAliceBundlePhpUnitReloadDatabaseTrait;
class BaseApiTestCase extends ApiTestCase
{
use ReloadDatabaseTrait;
protected ?EntityManagerInterface $em;
protected function setUp(): void
{
$kernel = self::bootKernel();
$this->em = $kernel->getContainer()
->get('doctrine')
->getManager();
}
}
Затем для теста в моем корневом tests
каталоге я получаю к нему доступ следующим образом:
//tests/UserRessourceTest.php
<?php
namespace AppTests;
use AppEntityUser;
use AppTestBaseApiTestCase;
class UserResourceTest extends BaseApiTestCase
{
public function testDeleteAccount(): void
{
...
/** @var User $deletedUser */
$deletedUser = $this->em->getRepository(User::class)->findOneById($user->getId());
...
}
}
Это хорошо работает для большинства моих случаев. Я надеюсь, что это сработает для вас 😉