SF2 Функциональные тесты: «Сброс контейнера не допускается, когда область активна»

Я пытаюсь выполнить простые функциональные тесты в своем приложении SF2.8:

  • PHPUnit 5.3.4
  • Выполняется командная строка: phpunit -c app src / LCH / MultisiteBundle / Tests / Controller / SiteControllerTest

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 …

Любые намеки?

Большое спасибо !

Solutions Collecting From Web of "SF2 Функциональные тесты: «Сброс контейнера не допускается, когда область активна»"

Спасибо 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'); } }