Jak nastavit Referer u Requestu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- vymak
- Člen | 92
Ahoj, mám v presenteru tento kód:
/** @var Request @inject */
public $requestHttp;
public function actionNahlasit()
{
if (empty($this->requestHttp->referer)) {
$this->redirect('Homepage:default');
}
}
Pokud je referer prázdný mám napsaný tento test a vše proběhne správně:
public function testRenderNahlasit()
{
$response = $this->tester->test('nahlasit');
Assert::type('Nette\Application\Responses\RedirectResponse', $response);
}
Chtěl bych ještě ale otestovat i případ, kdy bude referer nastavený, ale netuším jak to udělat. Testování přihlášeného uživatele jsem udělal pomocí tohoto topicu
Potřebuji tedy nějak namockovat třídu Request. Díval jsem se na mockista, ale nějak jsem ho nepochopil.
- Milo
- Nette Core | 1283
Jak ten presenter pro účely testování vytváříš?
Třídy nutně mockovat nemusíš. Můžeš si vytvořit vlastní instanci
Nette\Http\Request
a tu dostat do kontejneru.
Viz. také https://forum.nette.org/…ji-testovani
- vymak
- Člen | 92
Presenter vytvářím takto:
$presenterFactory = $container->getByType('Nette\Application\IPresenterFactory');
$presenter = $presenterFactory->createPresenter('Front:Homepage');
$presenter->autoCanonicalize = FALSE;
$params['action'] = 'default';
$request = new Request('Front:Homepage', 'GET', $params);
$response = $presenter->run($request);
return $response;
Editoval vymak (9. 10. 2014 13:05)
- vymak
- Člen | 92
Tak už jsem to rozchodil, ale nevím jestli je to úplně nejlepší řešení.
public function testRenderNahlasitMock()
{
$httpRequest = new Nette\Http\Request(new Nette\Http\UrlScript, NULL, NULL, NULL, NULL, ['referer' => 'hodnota']);
$this->getContainer()->removeService('httpRequest');
$this->getContainer()->addService('httpRequest', $httpRequest);
// bez tohoto řádku to nefunguje, musím zapsat přímo do proměnné v presenteru
$this->tester->presenter->requestHttp = $httpRequest;
$this->tester->testAction('nahlasit');
}