phpunit, mocking Environment
- wotaen
- Člen | 82
Ahoj,
mám třídu RouterHelper a v ní statickou metodu canonizeUrl…
public static function canonizeUrl() {
//v podstate tohle
return Environment::getHttpRequest()->uri
}
potřebuji metodu canonizeUrl testovat a nějak ji podstrčit vlastní
Environment. Je mi jasné, že s příchodem verze 2 a DI to už nebude
problém…jenomže já mám verzi 0.9 a navíc je UriScript frozen
(Environment::getHttpRequest()->getUri(false)->path = ‚xxx‘ hodí
Cannot modify a frozen object).
Máte nějaký nápad jak to ohackovat?
Díky, Michal
- Filip Procházka
- Moderator | 4668
Tak routeru předej httpRequest a pracuj s ním, environment nemáš šanci podstrčit.
Můžeš ještě zkusit změnit context aby obsahoval jiný httpRequest, který bude obsahovat jiný Uri :)
- wotaen
- Člen | 82
HosipLan napsal(a):
Tak routeru předej httpRequest a pracuj s ním, environment nemáš šanci podstrčit.
Můžeš ještě zkusit změnit context aby obsahoval jiný httpRequest, který bude obsahovat jiný Uri :)
„Můžeš ještě zkusit změnit context“ jsem nepochopil, můžeš to prosím upřesnit?
Díky
- Filip Procházka
- Moderator | 4668
- použiješ tento postup: https://gist.github.com/864134
- a v
MyConfigurator
si překryješ metoducreateContext
public function createContext()
{
$context = parent::createContext();
$mujUpravenyHttpReques = new ...;
$context->addService('Nette\Web\IHttpRequest', $mujUpravenyHttpReques);
return $context;
}
Ale je to stejně nedostatečné, protože mezi všemi testy se ti bude
stejně předávat jenom jedna instance toho Contextu. Ty musíš udělat to,
že si upravíš tu třídu, aby nepracovala s Environmentem ale s
$httpRequest
, který jí předáš při vytvoření.
- wotaen
- Člen | 82
HosipLan napsal(a):
- použiješ tento postup: https://gist.github.com/864134
- a v
MyConfigurator
si překryješ metoducreateContext
public function createContext() { $context = parent::createContext(); $mujUpravenyHttpReques = new ...; $context->addService('Nette\Web\IHttpRequest', $mujUpravenyHttpReques); return $context; }
Ale je to stejně nedostatečné, protože mezi všemi testy se ti bude stejně předávat jenom jedna instance toho Contextu. Ty musíš udělat to, že si upravíš tu třídu, aby nepracovala s Environmentem ale s
$httpRequest
, který jí předáš při vytvoření.
Aha, díky…nakonec jsem to udělal tou druhou metodou…