Testování odeslání formuláře
- fary
- Člen | 155
Ahoj, snažím se o testování formuláře (simulace odeslání + kontrola uložení dat do databáze), ale i když jsem si pročetl už několik návodů, článků a všeho možného (třeba zde), stále vůbec nechápu, jak to udělat. Pravděpodobně na to určitě časem přijdu sám (snad), ale opravdu bych ocenil nějakou blbuvzdornou pomoc.
Ještě bych se chtěl zeptat, když testuji ten formulář, je nutné si
vytvořit i testovací presenter + šablonu, kde se ten formulář vypíše
jako {control myForm}
?
- fary
- Člen | 155
Už jsem na to asi přišel. Celou dobu jsem se snažil vytvořit testovací
presenter, kde bych měl i formulář jako komponentu
createComponent<FormName>
. Myslím, že to je špatně.
Takhle bych totiž musel vlastně aplikaci psát přinejmenším 2x: jednou jako
samotnou aplikaci a potom jako testy. Správně by to tedy mělo být tak, že
v testu jen vytvořím request Nette\Application\Request
, který
nasměřuji na aplikační akci aplikačního presenteru, že? Např.
$request = new Nette\Application\Request('Front:Article', 'POST', $params, $post)
.
Nemusím tedy vytvářet nový presenter v testech, ale stačí využít ten
existující a jen nasimulovat jeho chování, že?
- Casper
- Člen | 253
Pokud chceš testovat čistě jen ten formulář, vhodnější je používat nějaký ten testovací presenter jako jsem psal ve zmíněném vlákně (ten testovací presenter je jen 1 pro všechny testy formulářů). Pokud bys to testoval na skutečném presenteru, už se to více blíží integračnímu testu. Nicméně možné to je.
Testovací presenter může vypadat třeba takto:
class TestPresenter extends \Nette\Application\UI\Presenter {
/**
* Callback for connecting forms / components
* - argument is this instance
* @var array
*/
public $onStartup = array();
protected function startup() {
parent::startup();
$this->onStartup($this);
}
public function renderDefault(){
$this->sendResponse(new \Nette\Application\Responses\TextResponse("ok"));
}
}