Testování odeslání formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- trejjam
- Backer | 65
Snažím se o otestování chování formuláře, ale nepřišel jsem na
vhodnou kombinaci nastavení Requestu aby test prošel bez ručního volání
->onSuccess()
.
Nějaký tip jak testujete formuláře vy?
testFooForm() {
/** @var \Nette\Application\IPresenterFactory $presenterFactory */
$presenterFactory = $this->container->getByType(Nette\Application\IPresenterFactory::class);
/** @var \Nette\Application\UI\Presenter $presenter */
$presenter = $presenterFactory->createPresenter('Homepage');
$presenter->autoCanonicalize = FALSE;
$fooForm = new Nette\Application\UI\Form;
$fooForm->addText('in');
$fooForm->addSubmit('send', 'Send');
$fooForm->onSuccess[] = function (Nette\Application\UI\Form $form) {
$form->getPresenter()->redirect('this');
};
$presenter->addComponent($fooForm, 'fooForm');
Assert::throws(function () use ($fooForm) {
$fooForm->onSuccess($fooForm); //když nezavolám tento řádek, neprojde Assert::true($response instanceof Nette\Application\Responses\RedirectResponse);
}, Nette\Application\AbortException::class);
$request = new Nette\Application\Request('Homepage', 'POST', [
'action' => 'default',
'do' => 'fooForm-submit',
], [
'in' => 'user@user.cz',
'send' => 'Send',
]);
$response = $presenter->run($request);
Assert::true($response instanceof Nette\Application\Responses\RedirectResponse);
}
class HomepagePresenter extends Nette\Application\UI\Presenter {
function renderDefault() {
$this->terminate();
}
}
- zool
- Člen | 144
Ahoj, odstraň tento řádek
Assert::throws(function () use ($fooForm) {
$fooForm->onSuccess($fooForm); //když nezavolám tento řádek, neprojde Assert::true($response instanceof Nette\Application\Responses\RedirectResponse);
}, Nette\Application\AbortException::class);
a request přepiš na
$request = new Nette\Application\Request('Homepage', 'POST', [
'action' => 'default',
], [
'in' => 'user@user.cz',
'send' => 'Send',
'do' => 'fooForm-submit',
]);
V novém nette se „do“ posílá v POST.