Cómo probar repositorios Doctrine

Correr pruebas unitarias en repositorios Doctrine de un proyecto Symfony no es recomendable. Cuando estás tratando con un repositorio, en realidad estás tratando con algo que está destinado a ser probado contra una conexión de base de datos real.

Afortunadamente, fácilmente puedes probar tus consultas contra una base de datos real, como se describe a continuación.

Probando la funcionalidad

Si realmente necesitas ejecutar una consulta, tendrás que arrancar el núcleo para conseguir una conexión válida. En este caso, debes extender a WebTestCase, el cual hace todo esto muy fácil:

// src/Acme/StoreBundle/Tests/Entity/ProductRepositoryFunctionalTest.php
namespace Acme\StoreBundle\Tests\Entity;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class ProductRepositoryFunctionalTest extends WebTestCase
{
    /**
     * @var \Doctrine\ORM\EntityManager
     */
    private $em;

    /**
     * {@inheritDoc}
     */
    public function setUp()
    {
        static::$kernel = static::createKernel();
        static::$kernel->boot();
        $this->em = static::$kernel->getContainer()
            ->get('doctrine')
            ->getManager()
        ;
    }

    public function testSearchByCategoryName()
    {
        $products = $this->em
            ->getRepository('AcmeStoreBundle:Product')
            ->searchByCategoryName('foo')
        ;

        $this->assertCount(1, $products);
    }

    /**
     * {@inheritDoc}
     */
    protected function tearDown()
    {
        parent::tearDown();
        $this->em->close();
    }
}
Bifúrcame en GitHub