jdecool/atoum-symfony-di-extension

此包已被废弃且不再维护。未建议替代包。

atoum的Symfony依赖注入扩展

1.1.0 2018-02-22 19:21 UTC

This package is auto-updated.

Last update: 2020-02-07 23:13:09 UTC


README

Build Status

此扩展受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));

断言器

此扩展添加了两个新的断言器: containerBuilderserviceDefinition

在以下示例中,我们将假设我们有一个容器定义,如下所示,它在一个 $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 文件。

atoum