testování formuláře v připojené komponentě k presenteru
- bauer01
- Člen | 30
Ahoj,
chci otestovat jednu komponentu s kalendářem, kde mám formulář pro editaci
událostí v něm. V onSuccess události po zpracování dat na základě
toho, zda byl form odeslán AJAXově či ne, bych chtěl provést na konci
redirect. To mi ale dělá problém, viz. níže uvedená chyba. Poradíte?
Při testování jsem zkusil vyjít z tohoto:
"":https://forum.nette.org/…a-presenteru
Nette 2.0.4, PHP 5.3, PHPUnit 3.6.11
Control
class Calendar extends UI\Control
{
/** @persistent integer $week week number */
public $week;
/** @persistent integer $year year number */
public $year;
public function __construct()
{
parent::__construct();
$this->monitor("Nette\Application\UI\Presenter");
}
protected function attached($presenter)
{
if ($presenter instanceof UI\Presenter) {
if ($presenter->isAjax()) {
$this->invalidateControl("timeline");
}
if (!$this->week) {
$this->week = date("W");
}
if (!$this->year) {
$this->year = date("Y");
}
}
parent::attached($presenter);
}
protected function createComponentEventForm()
{
....
}
public function eventFormSubmitted(UI\Form $form)
{
// Zpracuju data
....
if (!$this->presenter->isAjax()) {
$this->redirect("this");
}
}
ControlTest
class CalendarTest extends TestCase
{
/** @var Nette\Application\UI\Control */
protected $control;
protected function setUp()
{
$control = new Calendar();
$presenter = new CustomTestPresenter($this->context);
$presenter->addComponent($control, "calendar");
$this->control = $presenter["calendar"];
}
public function testEventForm()
{
$form = $this->control["eventForm"];
$this->assertInstanceOf("Nette\Application\UI\Form", $form);
}
public function testEventFormSubmitDelete()
{
$form = $this->control["eventForm"];
$form->setDefaults(array(
"id" => 1,
"delete" => "" // button delete
));
$this->control->eventFormSubmitted($form); // zde nastane chyba!
}
Samotná chyba
CalendarTest::testEventFormSubmitDelete()
Invalid argument supplied for foreach()
C:\wamp\www\libs\nette\Application\UI\Presenter.php:1169
C:\wamp\www\libs\nette\Application\UI\Presenter.php:966
C:\wamp\www\libs\nette\Application\UI\PresenterComponent.php:317
C:\wamp\www\dochazka\app\controls\calendar\Calendar.php:276
C:\wamp\www\dochazka\tests\app\controls\calendar\CalendarTest.php:60
C:\wamp\bin\php\php5.3.13\phpunit:46
Stejně tak je problém při render() komponenty, pokud vycházím
z tohoto:
"":https://forum.nette.org/…mi-parametry
Editoval bauer01 (7. 8. 2012 14:05)
- bauer01
- Člen | 30
udělal jsem malé demo, jedná se o komponentu, která přes persistentní parametry listuje v týdnech v roce. Stačí pustit testy
http://www.sendspace.com/file/4xnypp
Pokud by měl někdo čas na to mrknout a poradit, byl bych moc rád.
Editoval bauer01 (11. 9. 2012 14:00)
- bauer01
- Člen | 30
Tak jsem se k tomu opět dostal a už vím, kde mám chybu.
Po připojení komponenty k presenteru pomocí addComponent() musím nejdříve provést metodu run() presenteru, aby se tak provedla initGlobalParameters() a tím se naplní v presenteru $this->globalParams.
No jo, taková blbost, ale tak třeba na to někdo taky narazí. :-)