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
- 359 reads