我想使用LiipFunctionalTestBundle在Symfony中测试命令。结果,该命令发送电子邮件。我想检查是否在邮件服务中执行了发送,或者是否运行了我的存储库中的方法。
测试失败,因为没有执行setAsNotified,但确实如此。
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);
}
}
答案 0 :(得分:0)
测试命令的一种更简单的方法是将命令的逻辑移到服务中。该服务比SF命令更容易测试。