Я пытаюсь выполнить простые функциональные тесты в своем приложении SF2.8:
SiteControllerTest:
class SiteControllerTest extends WebTestCase { /** * {@inheritDoc} */ protected function setUp() { $this->superadmin = static::createClient(); } /* * @group multisite */ public function testList() { // Nothing here yet. } protected function tearDown() { parent::tearDown(); } }
Возврат PHPUnit:
Была 1 ошибка:
1) LCH \ MultisiteBundle \ Tests \ Controller \ SiteControllerTest :: testList Symfony \ Component \ DependencyInjection \ Exception \ LogicException: сброс контейнера не разрешен, когда область действия активна.
/var/www/html/sites/lch/loyalty/app/bootstrap.php.cache:2231 / var / www / html / sites / lch / loyalty / vendor / symfony / symfony / src / Symfony / Bundle / FrameworkBundle / Test /KernelTestCase.php:182 /var/www/html/sites/lch/loyalty/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php:192 / var / www / html / sites / lch /loyalty/src/LCH/MultisiteBundle/Tests/Controller/SiteControllerTest.php:29
Это вызвано самим классом Container во время метода reset ():
/** * {@inheritdoc} */ public function reset() { if (!empty($this->scopedServices)) { throw new LogicException('Resetting the container is not allowed when a scope is active.'); } $this->services = array(); }
Но я не могу найти почему. Я не использовал область действия в моей регистрации услуг, поэтому она должна быть по умолчанию self :: SCOPE_CONTAINER …
Любые намеки?
Большое спасибо !
Спасибо Matmouth, который нашел решение.
В начале, когда мы нуждались в объекте запроса в некоторых вызовах CLI, мы реализовали инъекцию запроса в контейнере только для CLI с: AppKernel.php:
protected function initializeContainer() { parent::initializeContainer(); if (PHP_SAPI == 'cli') { $this->getContainer()->enterScope('request'); $this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request'); } }
Это не зависело от среды, т. Е. При тестировании случаев, когда они загружались с «тестовой» средой, был введен пустой запрос, создавая исключение выше.
Поэтому мы добавили исключение тестовой среды, и все в порядке:
protected function initializeContainer() { parent::initializeContainer(); if (PHP_SAPI == 'cli' && $this->getEnvironment() != 'test') { $this->getContainer()->enterScope('request'); $this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request'); } }