2017-01-31 5 views
0

Я пытаюсь модульного тестирования формы, которая имеет 2 зависимостей (ObjectManager и EventDispatcher)Symfony 3 модульного тестирования формы с конструктором

Я пытался следовать official doc, но без успеха.

Мой файл тестирования:

<?php 

namespace Lch\MediaBundle\Tests\Form; 

use Lch\MediaBundle\Form\AddImageType; 
use Symfony\Component\EventDispatcher\EventDispatcher; 
use Doctrine\Common\Persistence\ObjectManager; 
use Symfony\Component\Form\PreloadedExtension; 
use Symfony\Component\Form\Test\TypeTestCase; 

class AddImageTypeTest extends TypeTestCase 
{ 
    private $entityManager; 
    private $eventDispatcher; 

    protected function setUp() 
    { 
     $this->entityManager = $this->createMock(ObjectManager::class); 
     $this->eventDispatcher = $this->createMock(EventDispatcher::class); 

     parent::setUp(); 
    } 

    protected function getExtensions() 
    { 
     $type = new AddImageType($this->entityManager, $this->eventDispatcher); 

     return array(
      new PreloadedExtension(array($type), array()), 
     ); 
    } 

    public function testSubmitValidData() 
    { 
     $form = $this->factory->create(AddImageType::class); 
    } 
} 

Я получил эту ошибку, когда я исполняю свой набор тестов:

TypeError: Argument 1 passed to LCH\MediaBundle\Form\AddImageType::__construct() must implement interface Doctrine\Common\Persistence\ObjectManager, none given, called in /home/matthieu/www/lch/media/src/Lch/MediaBundle/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php on line 85

кажется, что работа, которую я делать в методе getExtensions не работает, но не может выясните это.

У кого-нибудь есть ключ?

ответ

2

ObjectManager - это интерфейс, означающий, что вы не можете создавать экземпляр или передавать его непосредственно другим конструкторам.

Если вы используете Doctrine, замените его на Doctrine\ORM\EntityManager, который реализует интерфейс ObjectManager и может быть инстанцирован, в противном случае замените его собственной реализацией.

<?php 

namespace Lch\MediaBundle\Tests\Form; 

use Lch\MediaBundle\Form\AddImageType; 
use Symfony\Component\EventDispatcher\EventDispatcher; 
use Doctrine\ORM\EntityManager; 
use Symfony\Component\Form\PreloadedExtension; 
use Symfony\Component\Form\Test\TypeTestCase; 

class AddImageTypeTest extends TypeTestCase 
{ 
    private $entityManager; 
    private $eventDispatcher; 

    protected function setUp() 
    { 
     $this->entityManager = $this->createMock(EntityManager::class); 
     $this->eventDispatcher = $this->createMock(EventDispatcher::class); 

     parent::setUp(); 
    } 

    protected function getExtensions() 
    { 
     $type = new AddImageType($this->entityManager, $this->eventDispatcher); 

     return array(
      new PreloadedExtension(array($type), array()), 
     ); 
    } 

    public function testSubmitValidData() 
    { 
     $form = $this->factory->create(AddImageType::class); 
    } 
} 
+0

Можете немного почитать насчет насмешек. Ничего плохого в насмешке интерфейса и посмотрите на сообщение об ошибке. – Cerad