2016-06-08 6 views
1

Ich versuche, meinen Konsolenbefehl mit interaktiven Eingaben zu testen. Also habe ich eine Funktion geschrieben, um den Eingangsstrom des Frage-Helfers zu ändern.Symfony interaktiv Befehlstest endet mit RuntimeException

protected function getInputStream($input) 
{ 
    $stream = fopen('php://memory', 'r+', false); 
    fwrite($stream, $input); 
    rewind($stream); 

    return $stream; 
} 

Hier ist mein Code, die

public function testRunCommandWithoutArguments() 
{ 
    self::bootKernel(); 
    $application = new Application(self::$kernel); 
    $application->setAutoExit(false); 
    $application->add(new InstallCommand()); 

    $command = $application->find('app:install'); 
    $commandTester = new CommandTester($command); 
    $helper = $command->getHelper('question'); 
    /** @var QuestionHelper $helper */ 
    $helper->setInputStream($this->getInputStream('No\\nNo\\n')); 

    $commandTester->execute(array('command' => $command->getName())); 
} 

Runtime versagt: Abgebrochen /Users/Ashura/Dokumente/Projekte/CustomFramework/Verkäufer/Symfony/Symfony/src/Symfony/Component/Console /Helper/QuestionHelper.php:135 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Helper/QuestionHelper.php:56 /Benutzer/Ashura/Dokumente/Projekte /CustomFramework/src/AppBundle/Command/InstallCommand.php:96 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:256 /Benutzer/Ashura/Dokumente/Projekte/CustomFramework/vendor/symfony/symfony /src/Symfony/Component/Console/Tester/CommandTester.php:80 /Users/Ashura/Documents/Projects/CustomFramework/tests/AppBundle/Command/InstallCommandTest.php:79

Antwort

2

\n in Apostroph don Es funktioniert nicht, sie werden zum Beispiel in einem print angezeigt.

Ändern 'No\\nNo\\n' zu "No\nNo\n" und es sollte funktionieren.

Ein weiter Ich ziehe: sprintf('No%1$sNo%1$s', PHP_EOL)

+0

'\ n 'in Apostroph nicht funktioniert, gibt es wie in einem' print' zum Beispiel angezeigt. – chalasr

+0

Ich habe auch die anderen Zitate ausprobiert. Kein Glück. – Ashura

+0

Nehmen Sie die genaue Zeichenfolge, die ich gebe. Sie entziehen \\ n in Ihrem Code, Sie müssen "No \ nNo \ n" schreiben, und wenn Ihr Befehl nicht mehr als die zwei Eingaben benötigt, die Sie ihm geben, wird es funktionieren. Wie viele Fragen hat dein Befehl? Bestätigung enthalten. – chalasr