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
+
0
-

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
+
0
-

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.

trejjam
Backer | 65
+
0
-

Díky, zkusím (hned co vymyslím, kde jsem to řešil :) )