Testování presenteru, předání GET parametru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
johnikx
Člen | 2
+
0
-

Prošel jsem snad všechny návody i vlákna ve zdejším fóru, jak testovat nette presentery, ale na jednu věc nemůžu prostě přijít.

Mám následující testovací kód (úryvek z PHPUnit test case):

<?php
$requestData = array("action" => "detail", "name" => "whatever");
$presenter = new ApiPresenter($this->container, $this->container->mapper);
$request = new Nette\Application\Request("api", "GET", $requestData, $requestData);
$response = $presenter->run( $request );
$this->assertInstanceOf("Nette\Application\Responses\JsonResponse", $response);
?>

a v testovaném presenteru se potřebuji rozhodovat podle „name“:

<?php
$name = $this->getHttpRequest()->getQuery("name");
?>

Nicméně se nedaří „name“ parametr vůbec předat. Lze nějak z toho testu nasimulovat předání GET parametru „name“? Díky!

Editoval johnikx (3. 11. 2012 22:09)

llook
Člen | 407
+
0
-

Je možné podstrčit vlastní HttpRequest do kontextu:

$container->httpRequest = new \Nette\Http\Request(
                new \Nette\Http\UrlScript(/* URL */),
                NULL, // query
                NULL, // post
                NULL, // files
                NULL, // cookies
                null, // headers
                NULL, // method
                NULL, // remoteAddres
                NULL // remoteHost
                );
$container->classes['nette\\http\\irequest'] = 'httpRequest';
johnikx
Člen | 2
+
0
-

Funguje, díky! Jen jsem musel změnit $container->httpRequest = na $container->removeService(„httpRequest“); $container->addService(„httpRequest“, …);

Nox
Člen | 378
+
0
-

Alternativně mě napadlo změnit v Presenteru

<?php
$name = $this->getHttpRequest()->getQuery("name");
?>

na

<?php
$name = $this->getParameter("name");
?>

ale nejsem si jistý, jestli to pomůže…