symfony3.2でいくつかの基本コマンドを作成して定期的にニュースレターを生成します phpunit 5.5.4でsymfonyコマンドをテストしたいときにいくつかの問題を扱っています。 それは最初から失敗:それはcommandTesterように思えるテストコマンドsymfonyとphpunit
Error: Call to a member function writeln() on string
MyBundle/Command/MyCommand.php:197
vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:262
vendor/symfony/symfony/src/Symfony/Component/Console/Tester/CommandTester.php:84
MyBundle/Command/MyCommandTest.php:34
:私はステップによってthisステップに従うが、私の場合、私が手
use MyBundle\Command\MyCommand;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
class MyCommandTest extends KernelTestCase
{
public function testExecute(){
$kernel = static::createKernel();
$kernel->boot();
$application = new Application($kernel);
$application->add(new MyCommand());
$command = $application->find('generate:newsletter');
$commandTester = new CommandTester($command);
$commandTester->execute(array(
'command' => $command->getName()
));
$output = $commandTester->getDisplay();
$this->assertContains('done',$output);
}
}
:このユニットテストで
/**
* @param InputInterface $input
* @param OutputInterface $output
*/
protected function execute(InputInterface $input, OutputInterface $output){
$output->writeln("<info>Script start</info>");
//...
$output->writeln("<info>done</info>");
}
MyCommandのexecuteメソッドに正しいパラメーターを入れないでください。 CommandTesterClassの問題ではないかと思います。
私はここにいるので、あなたと共有し、一緒に解決策を見つけることができます。
は、事前に
いいえ、問題が見つかりました。 MyCommandクラスでは、同じ名前の変数を2つ使用します。 1つはテンプレートを取得し、もう1つはOutputInterfaceから取得します。私はテンプレートを取得した後私は "完了"を表示するためにwritelnを呼び出すが間違ったクラスから。私の変数の名前を変更した後、それは完了です。問題を申し訳ありません – ryl