2017-11-08 4 views
0

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の問題ではないかと思います。

私はここにいるので、あなたと共有し、一緒に解決策を見つけることができます。

は、事前に

+0

いいえ、問題が見つかりました。 MyCommandクラスでは、同じ名前の変数を2つ使用します。 1つはテンプレートを取得し、もう1つはOutputInterfaceから取得します。私はテンプレートを取得した後私は "完了"を表示するためにwritelnを呼び出すが間違ったクラスから。私の変数の名前を変更した後、それは完了です。問題を申し訳ありません – ryl

答えて

0

メソッド「getDisplayを()」ありがとうあなたはAPIドキュメントから見ることができるように文字列を返します。 http://api.symfony.com/3.0/Symfony/Component/Console/Tester/CommandTester.html、あなたの$出力変数にその文字列を代入しています。 私はあなたが必要と思うのは 'getOutput()'です。

+0

あなたの早急な返信をありがとうございます。 私はgetOuputメソッドを試しましたが、それは同じ問題です。 MyCommandTestの問題とは思わない – ryl

+0

コンソールから実行しているときにコマンドが正常に機能していますか? MyCommand.phpから198行と197行を提供できますか? – avpav

+0

はい、それです。私は使用されたいくつかのコマンドテスター変数を無効にします。だから私はこのエラーを取得します。助けてくれてありがとう、ごめんなさい – ryl

関連する問題