#database #mongodb #symfony #testing #phpunit
Вопрос:
Я новичок в Symfony (5.3) и хотел бы провести несколько тестов phpunit в своих репозиториях. База данных MongoDB используется через doctrine/ mongodb-odm-bundle (4.3).
Дело в том, что мне не удается отправить свои данные в тестовую базу данных. Они идут в стандартную базу данных, которую я использую для разработчиков.
Я полагаю, я могу настроить doctrine_mongodb.yaml, но прямо сейчас я не нашел способа заставить его работать.
Я не уверен, что это важно, но мой документ отображается следующим образом :
<?php
namespace AppDocument;
use AppDocumentEstablishmentDateStoreDocument;
use AppDocumentGroupDocument;
use DoctrineODMMongoDBMappingAnnotations as ODM;
use SymfonyComponentUidUuid;
/**
*
* @ODMDocument(db="database_local", collection="establishment",repositoryClass=EstablishmentRepository::class)
*
*/
class EstablishmentDocument
{
/**
* @ODMId(type="string")
*/
private $id;
/**
* @ODMField(type="string")
*/
private string $uuid;
.....
и мой doctrine_mongodb.yaml :
doctrine_mongodb:
auto_generate_proxy_classes: true
auto_generate_hydrator_classes: true
connections:
default:
server: '%env(resolve:MONGODB_URL)%'
options: {}
default_database: '%env(resolve:MONGODB_DB)%'
document_managers:
default:
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Document'
prefix: 'AppDocument'
alias: App
К сожалению, я не нашел много ресурсов по этой теме (testing/ Symfony / MongoDB). Большое спасибо за вашу помощь.
Комментарии:
1. «Я хотел бы провести несколько тестов phpunit в своих репозиториях» Означает, что вы не знаете, как это сделать, или у вас возникли проблемы с текущими тестами? Что конкретно вы тестируете? Что вы пробовали?
Ответ №1:
Вы должны использовать этот пакет: https://github.com/liip/LiipTestFixturesBundle
Затем с этой конфигурацией в вашем файле framework.yml:
liip_test_fixtures:
cache_db:
sqlite: liip_test_fixtures.services_database_backup.sqlite
Все данные ваших устройств загружаются в локальную базу данных sqlite.