私はサービスと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
コードの残りの部分を要約すると、GET パラメータ (utm) が存在する場合はそれを取得し、それらをセッション変数とプライベート変数に格納するリスナーサービスが呼び出されます。HistoryCookie
もう 1 つの Service はMapUtmOrigin
、HistoryCookie Service オブジェクトを取得してこれらのパラメーターを取得し、それらをデータベースのオブジェクトにマップします。
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)
)ように、常に空 (null ではない) です!$session->getBag("symfony/user/sfUser/attributes")