testování presenterů v nette

18
Testování presenterů Nutnost! Ondřej Mirtes

Upload: medio-interactive-sro

Post on 28-Jun-2015

4.882 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Testování presenterů v Nette

Testování presenterů

Nutnost!

Ondřej Mirtes

Page 2: Testování presenterů v Nette

Životní cyklus aplikaceNávštěvník HttpRequest

Router PresenterRequest

Application Presenter

IPresenterResponse Prohlížeč

match()

run()

send()

Page 3: Testování presenterů v Nette

Životní cyklus aplikace

PresenterRequest

Application Presenter

IPresenterResponse

run()

Page 4: Testování presenterů v Nette

První test

public function testRenderDefault(){

$presenter = new HomepagePresenter;$request = new PresenterRequest('Front:Homepage', 'GET',

array('lang' => 'cs'));$response = $presenter->run($request);$this->assertType('Nette\Application\RenderResponse', $response);

}

Page 5: Testování presenterů v Nette

Parametry• Parametry action/render metod

• Persistentní parametry

public function renderDefault($id) { }

array('id' => 'foo')

/** @var persistent */public $category;

array('category' => 'foo')

Page 6: Testování presenterů v Nette

Parametry• Volaný signál

• Volaná akce

public function handleVote($answer) { }

array('do' => 'vote', 'answer' => 'foo')

public function renderEdit($id) { }

array('action' => 'edit', 'id' => 'foo')

Page 7: Testování presenterů v Nette

RenderResponse• Nejčastější• Pro ověření funkčnosti IMHO úplně stačí• „Detailisté“ mohou kontrolovat naplněné

proměnné v šabloně:

$presenter->run($request);$this->assertType('Nette\Application\RenderResponse',

$response);$this->assertEquals('bar', $presenter->template->foo);

Page 8: Testování presenterů v Nette

RedirectingResponse• Pokud má po zpracování requestu nastat

přesměrování• Při zpracování signálů a formulářů

Page 9: Testování presenterů v Nette

DalšíResponse• DownloadResponse• ForwardingResponse• JsonResponse• ImageResponse

Page 10: Testování presenterů v Nette

Továrničky

public function testFooForm(){

$presenter = new HomepagePresenter;$this->assertType('FrontModule\FooForm', $presenter['fooForm']);

}

Page 11: Testování presenterů v Nette

Signály

public function testHandleFoo(){

$presenter = new HomepagePresenter;$request = new PresenterRequest('Front:Homepage', 'GET',

array('do' => 'foo'));$response = $presenter->run($request);$this->assertType('Nette\Application\RedirectingResponse', $response);

// + kontrola, jestli se stalo to, co jsme chtěli}

Page 12: Testování presenterů v Nette

Formuláře

public function testSubmitFooForm(){

$presenter = new HomepagePresenter;$request = new PresenterRequest('Front:Homepage', 'POST',

array('do' => 'fooForm-submit'), $values);$response = $presenter->run($request);$this->assertType('Nette\Application\RedirectingResponse', $response);

// + kontrola, jestli se stalo to, co jsme chtěli}

Page 13: Testování presenterů v Nette

Formuláře – při chybě

public function testSubmitFooForm(){

$presenter = new HomepagePresenter;$request = new PresenterRequest('Front:Homepage', 'POST',

array('do' => 'fooForm-submit'), $values);$presenter->run($request);$this->assertEquals('Chyba!', $presenter['fooForm']->errors[0])

}

• Výjimky nám bohužel zachytí submit handler formuláře

Page 14: Testování presenterů v Nette

Formuláře – při chybě

/** @expectedException IOException */public function testSubmitFooForm(){

$presenter = new HomepagePresenter;$request = new PresenterRequest('Front:Homepage', 'POST',

array('do' => 'fooForm-submit'), $values);$presenter->run($request);

}

• Výjimky nám bohužel zachytí submit handlerformuláře

• Ale mohl bych to v případě testování zrušitv BaseFormu!

Page 15: Testování presenterů v Nette

Čeho se vyvarovat• Přímého volání action/render/handle/submit

metod a testování jejich chování– Takový test neodpovídá reálnému spuštění

v provozu– Bez kontextu životního cyklu presenteru

by nemusely fungovat

Page 16: Testování presenterů v Nette

Co z toho budeme testovat?

Page 17: Testování presenterů v Nette

Selenium

Nutnost!

Page 18: Testování presenterů v Nette

Díky za pozornost!

Snad jsem vás nenudil ;)