Testování presenterů v Nette

5,344 views
5,106 views

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,344
On SlideShare
0
From Embeds
0
Number of Embeds
1,569
Actions
Shares
0
Downloads
22
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Testování presenterů v Nette

  1. 1. Testování presenterů<br />Nutnost!<br />Ondřej Mirtes<br />
  2. 2. Životní cyklus aplikace<br />Návštěvník<br />HttpRequest<br />match()<br />Router<br />PresenterRequest<br />Application<br />Presenter<br />run()<br />IPresenterResponse<br />Prohlížeč<br />send()<br />
  3. 3. Životní cyklus aplikace<br />PresenterRequest<br />Application<br />Presenter<br />run()<br />IPresenterResponse<br />
  4. 4. První test<br />public functiontestRenderDefault()<br />{<br />$presenter= newHomepagePresenter;<br />$request= newPresenterRequest('Front:Homepage', 'GET',<br />array('lang' => 'cs'));<br />$response = $presenter->run($request);<br />$this->assertType('NetteApplicationRenderResponse', $response);<br />}<br />
  5. 5. Parametry<br />Parametry action/render metod<br />Persistentní parametry<br />public functionrenderDefault($id) { }<br />array('id' => 'foo')<br />/** @var persistent */<br />public $category;<br />array('category' => 'foo')<br />
  6. 6. Parametry<br />Volaný signál<br />Volaná akce<br />public functionhandleVote($answer) { }<br />array('do' => 'vote', 'answer' => 'foo')<br />public functionrenderEdit($id) { }<br />array('action' => 'edit', 'id' => 'foo')<br />
  7. 7. RenderResponse<br />Nejčastější<br />Pro ověření funkčnosti IMHO úplně stačí<br />„Detailisté“ mohou kontrolovat naplněné proměnné v šabloně:<br />$presenter->run($request);<br />$this->assertType('NetteApplicationRenderResponse', $response);<br />$this->assertEquals('bar',$presenter->template->foo);<br />
  8. 8. RedirectingResponse<br />Pokud má po zpracování requestu nastat přesměrování<br />Při zpracování signálů a formulářů<br />
  9. 9. DalšíResponse<br />DownloadResponse<br />ForwardingResponse<br />JsonResponse<br />ImageResponse<br />
  10. 10. Továrničky<br />public functiontestFooForm()<br />{<br />$presenter= newHomepagePresenter;<br />$this->assertType('FrontModuleFooForm', $presenter['fooForm']);<br />}<br />
  11. 11. Signály<br />public functiontestHandleFoo()<br />{<br />$presenter= newHomepagePresenter;<br />$request= newPresenterRequest('Front:Homepage', 'GET',<br />array('do'=>'foo'));<br />$response = $presenter->run($request);<br />$this->assertType('NetteApplicationRedirectingResponse', $response);<br />// + kontrola, jestli se stalo to, co jsme chtěli<br />}<br />
  12. 12. Formuláře<br />public functiontestSubmitFooForm()<br />{<br />$presenter= newHomepagePresenter;<br />$request= newPresenterRequest('Front:Homepage', 'POST',<br />array('do'=>'fooForm-submit'), $values);<br />$response = $presenter->run($request);<br />$this->assertType('NetteApplicationRedirectingResponse', $response);<br /> // + kontrola, jestli se stalo to, co jsme chtěli<br />}<br />
  13. 13. Formuláře – při chybě<br />Výjimky nám bohužel zachytí submithandler formuláře<br />public functiontestSubmitFooForm()<br />{<br />$presenter= newHomepagePresenter;<br />$request= newPresenterRequest('Front:Homepage', 'POST',<br />array('do'=>'fooForm-submit'), $values);<br /> $presenter->run($request);<br />$this->assertEquals('Chyba!', $presenter['fooForm']->errors[0])<br />}<br />
  14. 14. Formuláře – při chybě<br />Výjimky nám bohužel zachytí submithandlerformuláře<br />Ale mohl bych to v případě testování zrušitv BaseFormu! <br />/**@expectedExceptionIOException*/<br />public functiontestSubmitFooForm()<br />{<br />$presenter= newHomepagePresenter;<br />$request= newPresenterRequest('Front:Homepage', 'POST',<br />array('do'=>'fooForm-submit'), $values);<br /> $presenter->run($request);<br />}<br />
  15. 15. Čeho se vyvarovat<br />Přímého volání action/render/handle/submit metod a testování jejich chování<br />Takový test neodpovídá reálnému spuštěnív provozu<br />Bez kontextu životního cyklu presenterubynemusely fungovat<br />
  16. 16. Co z toho budeme testovat?<br />
  17. 17. Selenium<br />Nutnost!<br />
  18. 18. Díky za pozornost!<br />Snad jsem vás nenudil ;)<br />

×