Hallo,
für ein Command versuche ich e2e Test zum Laufen zu bekommen.
Das Command stellt Fragen und nach der Eingabe wird die Antwort ausgewertet und entsprechendes Feedback ausgegeben. Das Command funktioniert manuell.
Der automatische Test schlägt fehl mit folgender Meldung:
Die Exception wird aufgrund dieser if()-Prüfung geworfen.
Leider gibt das Internet nicht viel her zum Thema.
Der UseCase (auf cli):
Zur Umsetzung des Test folge ich den Symfony Handbuch: Testing Commands und Testing a Command that Expects Input
Mein Test
Frage hierzu: Handbuch sagt:
Die Command Klasse
Was ist faul an meinem Test? Jede Hilfe ist Willkommen.
für ein Command versuche ich e2e Test zum Laufen zu bekommen.
Das Command stellt Fragen und nach der Eingabe wird die Antwort ausgewertet und entsprechendes Feedback ausgegeben. Das Command funktioniert manuell.
Der automatische Test schlägt fehl mit folgender Meldung:
Code:
1) e2e\Command\MyCommandTest::testExecute Symfony\Component\Console\Exception\MissingInputException: Aborted.2 /var/www/my_module/vendor/symfony/console/Helper/QuestionHelper.php:274
Leider gibt das Internet nicht viel her zum Thema.
Der UseCase (auf cli):
- Frage (ChoiceQuestion) mit exakt einem item
- Case falsche Eingabe: Ausgabe Fehlerstring
- Case richtige Eingabe: Nächste Frage
Zur Umsetzung des Test folge ich den Symfony Handbuch: Testing Commands und Testing a Command that Expects Input
Mein Test
Frage hierzu: Handbuch sagt:
-
PHP-Code:
use Symfony\Component\Console\Helper\HelperSet;
-
PHP-Code:
use Symfony\Component\Console\Helper\QuestionHelper;
PHP-Code:
# tests/e2e/Command/MyCommandTest.php
<?php
namespace e2e\Command;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Helper\QuestionHelper;
class MyCommandTest extends KernelTestCase
{
public function testExecute()
{
$kernel = static::createKernel();
$application = new Application($kernel);
$command = $application->find('app:my-command');
$commandTester = new CommandTester($command);
$commandTester->setInputs(['abc']);
$commandTester->execute([
'command' => $command->getName()
]);
$output = $commandTester->getDisplay();
$expected = 'The required resource with name >>abc<< does not exist!';
$this->assertEquals($expected, $output);
}
}
PHP-Code:
# src/Command/MyCommand.php
<?php declare(strict_types=1);
namespace App\Command;
...
class MyCommand extends Command
{
protected static $defaultName = "app:my-command";
public function __construct(...)
{
parent::__construct();
...
}
protected function configure()
{
// NOTE: nothing to configurate here
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->helper = $this->getHelper('question');
...
/**
* start to ask with defined questions
*/
$this->questionService->questionChoiceResource($this->resource, $input, $output);
...
return 0;
}
...
}
Kommentar