Získání cookies – testování presenteru
- Fooly
- Člen | 26
Ahoj,
potřeboval bych vytvořit test na kontrolu načítání cookies
v presenteru.
Cookies načítám v basePresenter a co se týče manuální kontroly, tak se
cookies přidají, a vše funguje jak má.
Teď bych potřeboval vytvořit automatický test.
<?php
public function setUp()
{
/** @var Nette\Application\IPresenterFactory $presenterFactory */
$presenterFactory = $this->container->getByType('Nette\Application\IPresenterFactory');
$this->presenter = $presenterFactory->createPresenter('Front:Product');
}
public function testLoadPresenter()
{
$request = new Nette\Application\Request('Front:Product','POST',array('action'=>'default'));
$response = $this->presenter->run($request);
var_dump($response->getCookies());
/*tohle nefunguje, protoze response neni typu Nette\HTTP\Response ale Nette\Application\Responses\TextResponse*/
throw new \Exception('FU');
}
?>
Potřeboval bych poradit jakoukoli možnost, jak do requestu nacpat GET
metodu, ktera tam pošle nějaké parametry, ty se v presenteru uloží do
cookies, a následně je v response vytáhnout.
Předem děkuji.
- Fooly
- Člen | 26
Děkuji, problém ale právě je, že nevím jak za pomocí
Application\Request získat Http\Response,
také nevím, jak do presenteru poslat metodu GET tak, aby obsahovala data na
základě kterých se ukládají cookies.
Url na web mám
www/product?utm_source=„neco“&utm_campaign=„neco2“
tohle bych potreboval otestovat, jestli se uloží do cookies.
Jestli někdo tušíte jak to udělat, ocenil bych i ukázky kódu, díky.
- Filip Procházka
- Moderator | 4668
Podobný problém jsme řešili nedávno, zmiňuji to i v přednášce o tom jak testujeme naše
/api
. Stačí ti HttpResponseMock
(když teď na něj koukám, tak ta práce s těmi cookies by šla napsat
o dost lépe) a před vytvořením instance presenteru ho podstrčit do
containeru
$httpResponse = new HttpResponseMock();
$this->container->removeService('httpResponse');
$this->container->addService('httpResponse', $httpResponse);
To jednak řeší problém s tím, že se ti nebudou posílat hlavičky v konzoli a nenarazíš na oblíbenou chybu „headers have been already sent“ a druhak to jde o něco snadněji assertovat. Kompletní ukázku jak by to celé mohlo fungovat najdeš tady, měj ale na paměti, že Kdyby/TesterExtras rozhodně není hotová knihovna a raději se nespoléhej na to, že zůstane v téhle podobě a těch pár řádků si zkopíruj do projektu.