我是服务和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")
已正确设置!