Symfony2:根据请求侦听器服务使用服务在请求范围中进行功能测试

时间:2013-07-15 13:28:23

标签: symfony scope request phpunit listener

我是服务和phpUnit的新手。

所以我正在尝试测试我的(工作)服务。这是我的services.yml

services:
    history_cookie:
        class:        VENDOR\Bundle\Service\Visitor\EventListener\HistoryCookie
        scope:        request
        tags:
            -
                name: kernel.event_listener
                method: onKernelRequest
                event: kernel.request
    map_utm_origin:
        class:        VENDOR\Bundle\Service\Visitor\MapUtmOrigin
        arguments:    [@history_cookie, @doctrine.orm.entity_manager]
        scope:        request

为了总结我的其余代码,我有一个名为HistoryCookie 监听器 服务,它检索一些GET参数(utm)(如果存在),将它们存储在Session和私有变量中。

我的其他服务MapUtmOrigin检索HistoryCookie服务对象以获取这些参数,并将它们映射到数据库中的对象。

1。因为我对服务也很陌生,是处理这种情况的最好方法吗?

2。在单元测试中,我无法使其工作

这是我最后一次尝试功能测试(我正在使用TheodoEvolutionSessionBundle来管理Symfony 1.2 / 1.4会话):

    $configuration = $this->getMock('Theodo\Evolution\Bundle\SessionBundle\Manager\BagManagerConfigurationInterface');
    $configuration->expects($this->once())
        ->method('getNamespaces')
        ->will($this->returnValue(array('array', 'scalar')))
    ;
    $session = new Session(new MockArraySessionStorage());
    $manager = new BagManager($configuration);
    $manager->initialize($session);
    $client = static::createClient();
    $container = $client->getContainer();
    $container->enterScope('request');
    $container->set('session', $session);
    $crawler = $client->request('GET', '/contact?utm_source=google&utm_medium=cpc&utm_campaign=nocampaign');
    $container = $client->getContainer();
    ld($container->get("map_utm_origin"));
    ld($session->getBag("symfony/user/sfUser/attributes"));

$container->get("map_utm_origin")总是空的(不为空),就像它从未处理过请求一样(通常在onKernelRequest($requestEvent)中初始化),尽管$session->getBag("symfony/user/sfUser/attributes")已正确设置!

0 个答案:

没有答案