У меня есть несколько бандлов, которые еще не установлены в 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?






Я бы начал с этого фрагмента:
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-injection и symfony/config от symfony. Но здесь вы должны проверить, будет ли выбрано какое-либо исключение. Если нет, то каждый сервис найден и может быть подключен.
С участием
$containerBuilder->get('service_id') instanceof Bundle\Service\SomeService
вы даже можете проверить, действительно ли был загружен класс обслуживания.