2013-09-06 2 views
0

Я хочу создать некоторые объекты, которые будут работать только в тестовой среде во время моих модульных тестов. Я не думаю, что есть какое-то отличное решение (я ошибаюсь?), Поэтому, вероятно, другим способом является создание объектов в тестовой папке и их использование.Symfony2/Doctrine - создать объект только в тестовой среде

Но есть кое-что, что я не понимаю. Symfony устанавливает папки BundleName\Entity в виде папок, где находятся сущности, а папка Tests/Entity не будет работать с моими сущностями. Итак, как я могу явно установить мою папку Tests/Entity для работы (чтение/установка/регистрация объектов) в моем тестовом примере? Я предполагаю, что это сделано путем настройки менеджера сущности доктрины?

+0

Попробуйте получить доступ к сущности и полный путь, как 'Компания \ BundleName \ Tests \ Entity \ SomeEntity' –

+0

Почему вы хотите сделать это в любом случае? Какая указка? –

+0

@ ЭлнурАбдурарахимов для создания тестовых объектов без насмешек – pleerock

ответ

0

Возможно, я ошибаюсь, но я думаю, что администратор сущности Doctrine не позволяет вам добавлять отображение для дополнительных объектов на лету.

Как обходной путь «crutchy», вы можете создать дополнительный пакет, который содержит объекты, которые вы хотите использовать с вашими тестами, а затем оставить конфигурацию Symfony2 для тестовой среды одинаковой (если у вас «auto_mapping» установлено значение true; см. this reference document), изменяя конфигурацию orm для среды dev и prod. Вам необходимо отключить автоматическое сопоставление и указать узлы явно, за исключением пакета с вашими объектами только для тестирования из «сопоставлений».

Или, может быть, вы don't even need to specify the value of "auto_mapping". Соответствующая часть вашего конфига («entity_managers», «сопоставления») для среды dev \ prod должна выглядеть примерно так же, как в записи в поваренной книге.

Опять же, я хочу подчеркнуть, что я не уверен на 100%, что этот ответ верен, так как мои знания о Symfony2 стали немного нечеткими.

1

Нашел эту функцию в одном из моих проектов, возможно, это может вам помочь. Эта функция создает новый EntityManager, где вы можете определить пространство имен ваших объектов.

/** 
* @return EntityManager 
*/ 
public static function createTestEntityManager() 
{ 
    if (!class_exists('PDO') || !in_array('sqlite', \PDO::getAvailableDrivers())) { 
     self::markTestSkipped('This test requires SQLite support in your environment'); 
    } 
    $config = new \Doctrine\ORM\Configuration(); 
    $config->setEntityNamespaces(array('SerializerBundleTests' => 'Top10\SerializerBundle\Tests\Entity')); 
    $config->setAutoGenerateProxyClasses(true); 
    $config->setProxyDir(\sys_get_temp_dir()); 
    $config->setProxyNamespace('SerializerBundleTests\Entity'); 
    $config->setMetadataDriverImpl(new AnnotationDriver(new AnnotationReader())); 
    $config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache()); 
    $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache()); 

    $params = array(
     'driver' => 'pdo_sqlite', 
     'memory' => true, 
    ); 

    return EntityManager::create($params, $config); 
} 
Смежные вопросы