Testovani presenteru – Komponenta uz ma rodice

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Blujacker
Člen | 89
+
0
-

Ahoj,

snazim se testovat presentery, ale jakmile mam v TestCase vice jak jednu metodu test, spadne mi to na chybe exception 'Nette\InvalidStateException' with message 'Component 'XXXX' already has a parent.'.

Presenter ale pro kazdy test vytvarim novy (teda myslim). V metode setUp volam:

$presenterFactory = $this->container->getByType('\Nette\Application\IPresenterFactory');
$presenter = $presenterFactory->createPresenter($name);

Nicmene tohle vypada na to, ze instance komponenty XXXX se vytvori pouze jednou (pri prvnim testu) a pak uz se nevytvari. Da se nejak docilit toho, aby se komponenty automaticky vytvarely pro kazdy test take nove? Nebo jak resite tento problem Vy?

Dekuji!

David Matějka
Moderator | 6445
+
0
-

Jak vytvaris komponenty v tom presenteru?

Blujacker
Člen | 89
+
0
-

Pres konstruktor si ji injectnu a pak si to latte samo vytvori pres createComponentXXXX. Nicmene tahle komponenta byla navrzena tak, ze bude pouzita jenom jednou (takze se negeneruje pres tovarnu) a vzdy tedy existuje pouze jedna instance.

A tim jsem si asi rovnou odpovedel, musi se to predelat na tovarnicku, tak aby pri kazdem injectnuti do presenteru vytvorila nova instance. Prislo mi zbytecne pouzivat tovarnu na veci, ktere se jiste pouziji pouze jednou a tim jsem si asi docela zavaril, mam takhle udelanych asi 20 komponent :)

Dekuji za nakopnuti!