jdecool / atoum-symfony-di-extension
atoum的Symfony依赖注入扩展
Requires
- atoum/atoum: ^3.1
- symfony/dependency-injection: ^2.1|^3.0|^4.0
Requires (Dev)
- symfony/config: ^2.1|^3.0|^4.0
This package is auto-updated.
Last update: 2020-02-07 23:13:09 UTC
README
此扩展受SymfonyDependencyInjectionTest的启发,用于简化Symfony DI的测试。
示例
namespace Vendor\MyProjectBundle\DependencyInjection\Tests\Units; use atoum; use Vendor\MyProjectBundle\DependencyInjection\VendorMyBundleExtension as TestedClass; use Symfony\Component\DependencyInjection; class VendorMyBundleExtension extends atoum { public function testLoad() { $this ->given( $container = new DependencyInjection\ContainerBuilder(), $testedClass = new TestedClass(), $testedClass->load([], $container) ) ->then ->containerBuilder($container) ->hasService('myServiceName') ->hasParameter('myParameterName') ; } }
安装它
使用composer安装扩展
composer require --dev jdecool/atoum-symfony-di-extension
使用atoum配置文件启用扩展
<?php // .atoum.php require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; use jdecool\atoum\symfonyDependencyInjection; $runner->addExtension(new symfonyDependencyInjection\extension($script));
断言器
此扩展添加了两个新的断言器: containerBuilder
和 serviceDefinition
。
在以下示例中,我们将假设我们有一个容器定义,如下所示,它在一个 $container
变量中可用
<parameters> <parameter key="mailer.transport">sendmail</parameter> </parameters> <services> <service id="myAwesomeAlias" alias="serviceid" /> <service id="serviceid" class="ArrayObject" > <argument type="collection"> <argument type="service"><service class="stdClass" /></argument> </argument> <call method="append"> <argument type="service"><service class="stdClass" /></argument> </call> <tag name="myCustomTag" /> </service> <service id="app.synthetic_service" synthetic="true" /> </services>
containerBuilder
在containerBuilder
断言器上,所有来自变量断言器的断言都可用。
hasService
hasService
检查容器中是否存在服务。
$this ->containerBuilder($container) ->hasService('serviceId') // passes ->hasService('service_id') // fails ;
hasAlias
hasAlias
检查容器中是否存在别名。
$this
->containerBuilder($container)
->hasAlias('myAwesomeAlias') // passes
->hasAlias('anUnexistingAlias') // fails
;
hasSyntheticService
hasSyntheticService
检查容器中是否存在服务,并且是合成的。
$this ->containerBuilder($container) ->hasSyntheticService('app.synthetic_service') // passes ->hasService('app.synthetic_service') // fails ->hasSyntheticService('app_synthetic_service') // fails ;
hasNotService
hasNotService
检查容器中是否存在服务。
$this ->containerBuilder($container) ->hasService('service_id') // passes ->hasService('serviceId') // fails ;
hasParameter
hasParameter
检查容器中是否存在参数。
$this ->containerBuilder($container) ->hasParameter('mailer.transport') // passes ->hasParameter('mailer_transport') // fails ;
hasNotParameter
hasNotParameter
检查容器中是否存在参数。
$this ->containerBuilder($container) ->hasNotParameter('mailer_transport') // passes ->hasNotParameter('mailer.transport') // fails ;
serviceDefinition
在serviceDefinition
断言器上,所有来自变量断言器的断言都可用。
isInstanceOf
isInstanceOf
检查定义的服务类是否与测试的类相同。
注意:这不会检查类是否继承自另一个类。
$this
->serviceDefinition($container->getDefinition('serviceid'))
->isInstanceOf('ArrayObject') // passes
->isInstanceOf('SplFileObject') // fails
;
isNotInstanceOf
isNotInstanceOf
检查定义的服务类是否与测试的类不同。
注意:这不会检查类是否继承自另一个类。
$this
->serviceDefinition($container->getDefinition('serviceid'))
->isNotInstanceOf('SplFileObject') // passes
->isNotInstanceOf('ArrayObject') // fails
;
hasArgument
hasArgument
检查服务定义是否在传递的索引中具有参数。
$this
->serviceDefinition($container->getDefinition('serviceid'))
->hasArgument(0)
;
hasTag
hasTag
检查服务定义是否包含指定的 标签。
$this
->serviceDefinition($container->getDefinition('serviceid'))
->hasTag('myCustomTag')
;
hasMethodCall
hasMethodCall
检查服务定义是否包含通过参数传递的方法名上定义的方法调用。
$this
->serviceDefinition($container->getDefinition('serviceid'))
->hasTag('myCustomTag')
;
链接
许可
此扩展在 MIT 许可下发布。有关详细信息,请参阅附带的 LICENSE 文件。