Юнит-тестирование сервисов аннотации без Symfony - PullRequest
1 голос
/ 15 марта 2019

У меня есть несколько пакетов, которые еще не установлены в Symfony.

В этих пакетах есть файл services.yml:

mybundle/src/Bundle/Resources/config/services.yml

services.yml содержит классыи аргументы из пакета, которые позже используются Symfony, но не самим пакетом:

mybundle.data.download.get:
  class: mybundle\data\download\getinfo\get
  arguments:
  - "@bundle.myDepdendency.generate"
  - "@bundle.myDepdendency.dosomething"
  - "@bundle.helloThere"

У меня есть рабочие модульные тесты в Symfony для services.yml, которые проверяют, что все классы загруженыправильно, однако, так как я разрабатываю пакеты независимо от Symfony, я хотел бы иметь тест, чтобы узнать, содержит ли services.yml все классы и их аргументы.

Так что вопрос:

Есть ли способ проверить, содержит ли services.yml данные классы и их аргументы без использования Symfony?

1 Ответ

2 голосов
/ 15 марта 2019

Я бы начал с этого фрагмента:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

$containerBuilder = new ContainerBuilder();
$loader = new YamlFileLoader($containerBuilder, new FileLocator(__DIR__.'/../BundlePath/Resources/config'));
$loader->load('services.yml');
$containerBuilder->compile();

Конечно, вам нужны компоненты symfony / dependency-инъекции и symfony / config в symfony. Но здесь вы бы проверили, будет ли выброшено какое-либо исключение. Если нет, то каждая служба найдена и может быть подключена.

С

$containerBuilder->get('service_id') instanceof Bundle\Service\SomeService

вы даже можете проверить, действительно ли загружен класс обслуживания.

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