Ahoj, jde nejak vynucene spustit command v nette testeru, abych ho mohl otestovat?

Můžeš si z containeru vytáhnout Kdyby\Console\Application a zavolat nad ní run, přičemž v $input si sestavíš konfiguraci, včetně názvu commandu.

To bohuzel nejede, ztroskota to na ziskani presenteru (resp. template) ktery ziskavam z app Fatal error: Call to a member function getTemplate() on a non-object

/** @var \Nette\Application\Application @inject */
public $app;

Kod pro testovani je:

$application = $this->container->getByType('Kdyby\Console\Application');
$input = new StringInput('exportScotchPrices');
$application->run($input);

Tohle jsem četl a měl jsem to tak ještě než jsem se zeptal, ale to mi opět nepředá presenter a tím pádem template.

Ono by asi pomohlo, kdyby jsi ukázal kód toho commandu a vysvětlil co znamená “nepředá presenter” a co si pod tím představuješ.

v execute mám toto:

$presenter = $this->app->getPresenter();
$template = clone $presenter->getTemplate();

normálně to projde, ale při testech ne, spoštím viz nahoře vyhodí: Call to a member function getTemplate() on a non-object

Obesel jsem to timhle a jede to

$template =  $this->getHelper('container')->getContainer()->nette->template;

V testech si totiž nepouštíš Application::run(), které se stará o spustění presenteru. Jinak by ti to fungoval. Na druhou stranu, volat tohle v testech není vůbec vhodné.

Takže je to správné řešení? Proč není vhodné v testech spouštět app run?


You must first log in to participate in this discussion