Каким образом любой сервис может быть внедрен в подкласс WebTestCase в Symfony? - PullRequest
0 голосов
/ 16 мая 2018

Может быть, я что-то упускаю ... до, я так думаю, но не смог найти ответ на этот вопрос.

WebTestCase создает этот пример конструктора:

public function __construct(?string $name = null, array $data = [], string $dataName = '')
{
     parent::__construct($name, $data, $dataName);
}

Пытался добавить мой сервис в качестве первого или последнего аргумента - Symfony выдает ошибку:

Type error: Too few arguments to function Tests\AppBundle\Manager\ContactManagerTest::__construct(), 0 passed in /Library/WebServer/Documents/HEPT/vendor/bin/.phpunit/phpunit-5.7/src/Framework/TestSuite.php on line 568 and at least 1 expected in /Library/WebServer/Documents/HEPT/tests/AppBundle/Manager/ContactManagerTest.php:22

Должен ли я как-то использовать контейнер напрямую? Почему автопроводка не работает для классов WebTestCase, если существует класс моста?

1 Ответ

0 голосов
/ 17 мая 2018

WebTestCase используется в контексте PHPUnit (который не имеет ничего общего с Symfony и внедрением его зависимостей).

Они фактически генерируют ядро ​​и его контейнер, см. Этот фрагмент кода, извлеченный из Исходный код Symfony :

protected static function createClient(array $options = array(), array $server = array())
{
    $kernel = static::bootKernel($options);
    $client = $kernel->getContainer()->get('test.client');
    $client->setServerParameters($server);
    return $client;
}

Это означает, что вы можете легко получить доступ к контейнеру следующим образом:

$kernel = static::bootKernel($options);
$container = $kernel->getContainer();

Обратите внимание, что static::$kernel->getContainer() доступен, как только высоздал ваш клиент для вашего теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...