codeception symfony functional Получение клиента (client) - через что слать запросы - Функциональные тесты
Primary tabs
Проверялось на: Symfony 6, Symfony 7, Codeception 5
Базовый класс (от него можно наследовать ваши Cest-классы, которые являются основным подходом в кодэсепшене) для тестовых наборов может выглядеть напр. так:
<?php
namespace App\Tests\_support;
use App\Tests\FunctionalTester;
use Doctrine\ORM\EntityManagerInterface;
class BaseFunctionalCest
{
use CommonFunctionalTrait;
protected $inited = false;
protected EntityManagerInterface $em;
protected FunctionalTester $functionalTester;
public function _before(FunctionalTester $I, )
{
$this->initMe($I);
}
protected function initMe(FunctionalTester $I)
{
if (!$this->inited) {
$this->functionalTester = $I;
$this->getEntityManager();
$this->runInitConsoleCommands();
}
}
protected function getApiVersion() {
return 'v1';
}
protected function getEntityManager()
{
$this->em = $this->functionalTester->grabService('doctrine')->getManager();
}
}
Получаем клиент из ядра симфони:
protected function getUnauthedClient(): KernelBrowser
{
$client = $this->functionalTester->grabService('kernel')->getContainer()->get('test.client');
$client->catchExceptions(false); // выключаем перехват исключений
return $client;
}
-- можно выставить какие-то опции, если требуется сделать так, чтобы клиент работал от доменного имени отличного от localhost-а, то в config/services.yaml добавим:
parameters:
test.client.parameters:
HTTP_HOST: '%env(APP_COOKIE_DOMAIN)%' # с использованием .env, можно и явно задать строку
Как использовать клиент
Через клиент можно слать запросы к API и, таким образом, проводить тестирование.
Другие способы получения клиента
- Получение клиента через костыль, основанный на стандартном WebTestCase -- решает проблему авторизации для запросов, начиная со второго (первый работает и так)
- Log in to post comments
- 843 reads