Testování HttpRequest & HttpResponse

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

Mám presenter, který se chová jako RESTfull API. Při většině dotazů kontroluje nastavené HTTP hlavičky (autorizační klíč, použitá verze API), při odpovědí občas změní stavový kód třeba na 400 a někdy odešle další HTTP hlavičky.

Jakým způsobem můžu takový presenter funkčně otestovat? (PHPUnit)
S odpovědí jsem si poradil díky použití vlastního ApiResponse extends JsonResponse, který podobně jako RedirectingResponse obsahuje stavový kód a hlavičky ke změnění, ty jdou testovat, a pošle je až v metodě send.

Pro vytváření požadavků jsem nejdřív používal Application\Request podle https://tester.nette.org/cs/#… , ale to mi neumožňuje vložit vlastní HTTP hlavičky.

Nejspíš musím vytvořit vlastní Http\Request, jakým způsobem ho pak mám jednoduše aplikaci vnutit?
Nebo máte už někdo elegatní funkční postup na tento problém?

Filip Procházka
Moderator | 4668
+
0
-

V API je stále v konstruktoru container, takže z toho budu vycházet, uprav si to pro svoji verzi Nette.

$context = clone Nette\Environment::getContext();
$context->removeService('httpRequest');
$context->httpRequest = new Nette\Http\Request(...);

$presenter = new ApiPresenter($context);
zakjan
Člen | 9
+
0
-

Dobře, to funguje. Ale co když bych chtěl testovat i případné Response, které vrací až ErrorPresenter po zachycení např. BadRequestException? Našlo by se lepší řešení než podědit a upravit Application, aby mi umožnila přístup k hotovému odeslanému Response?

Filip Procházka
Moderator | 4668
+
0
-

Ne.

try {
	$presenter = new ApiPresenter($context);
} catch (\Exception $e) {
    $this->assert...
}

Nebo http://www.phpunit.de/…phpunit.html#…