2016-07-01 14 views
1

Ich möchte den Befehl in Symfony mit LiipFunctionalTestBundle testen. Der Befehl sendet daher eine E-Mail. Ich möchte überprüfen, ob entweder send in Mailer-Dienst ausgeführt wurde, oder eine Methode in meinem Repository ausgeführt wurde.LiipFunctionalTestBundle Mock-Service in RunCommand

Der Test schlägt fehl, wie setAsNotified nicht ausgeführt wird, aber es ist.

namespace Tests\AppBundle\Controller; 
use AppBundle\Command\NewMessageEmailCommand; 

use Liip\FunctionalTestBundle\Test\WebTestCase; 
use Symfony\Bundle\FrameworkBundle\Console\Application; 
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; 
use Symfony\Component\Console\Tester\CommandTester; 

class NewMessageEmailCommandTest extends WebTestCase 
{ 

public function setUp() 
{ 
    $this->fixtures = $this->loadFixtureFiles(array(
     '@AppBundle/DataFixtures/ORM/users.yml', 
     '@AppBundle/DataFixtures/ORM/messages.yml', 
    )); 
} 

public function testExecute() 
{ 
    $kernel = $this->createKernel(); 
    $kernel->boot(); 

    $msgRep = $this->getContainer()->get('doctrine.orm.default_entity_manager')->getRepository('AppBundle:Message'); 
    $stub2 = $this->getMockBuilder(get_class($msgRep)) 
     ->disableOriginalConstructor() 
     ->setMethods(['setAsNotified']) 
     ->getMock(); 

    $stub2->expects($this->atLeastOnce()) 
     ->method('setAsNotified') 
     ->willReturn(true); 


    $this->runCommand('email:message_received:send',[ 
     '--limit' => 1 
    ], true); 

} 

} 

Antwort

0

Ein einfacher Weg, um Ihren Befehl zu testen, wäre zu Ihrem Befehl Logik innerhalb eines Dienstes zu bewegen. Der Dienst wäre viel einfacher zu testen als der SF-Befehl.