J'ai suivi les points de site Testing Symfony Apps with a Disposable Database Tutoriel. J'ai ajouté des fixtures dans mon testcase et aucune erreur n'apparaît pendant SetUp. Si j'ajoute une Erreur dans les Fixtures (par exemple en laissant un champ nullable = false vide) l'erreur est affichée, donc ce code est définitivement exécuté.En mémoire sqlite toujours vide malgré la configuration
Ma config:
doctrine:
dbal:
default_connection: memory
connections:
memory:
driver: pdo_sqlite
memory: true
charset: UTF8
Mon SetUp dans mon WebTestCase:
protected function setUp() {
parent::setUp();
self::bootKernel();
DatabasePrimer::prime(self::$kernel);
$this->loadFixtures([
'AppBundle\DataFixtures\ORM\UserData',
'AppBundle\DataFixtures\ORM\ArtistData'
]);
}
Pourtant, dans mon WebTestCase il semble qu'il existe aucune table. La sortie génère une exception Doctrine indiquant que ma table n'existe pas.
SQLSTATE[HY000]: General error: 1 no such table: my_user_table
Si je passe à sql_lite dans un fichier, tout fonctionne très bien sans aucun autre changement:
dbal:
default_connection: file
connections:
file:
driver: pdo_sqlite
path: %kernel.cache_dir%/test.db
charset: UTF8
Tout le monde a eu du succès avec ledit tutoriel ou en utilisant un db mémoire SQLite pour les tests unitaires et a des notes ou des idées?
Mise à jour: J'ai modifié ma configuration pour que le noyau ne soit pas arrêté entre les deux. Il n'a pas aidé:
parent::setUp();
$this->client = $this->getClient();
MemoryDbPrimer::prime(self::$kernel);
$this->loadFixtures([
'AppBundle\DataFixtures\ORM\UserData',
'AppBundle\DataFixtures\ORM\ArtistData'
]);
Avez-vous essayé de changer le nom de connexion de 'memory', par exemple' default_connection: memory' à 'default_connection: default' ou un autre nom? il se peut que l'utilisation de ce mot réservé (car c'est une propriété dans les données de connexion elle-même) cause un problème. Il pourrait être utile de poster votre fichier d'appareil aussi. –
@JohnJoseph: J'ai essayé, mais ça n'a fait aucune différence. Mon fichier d'appareils est assez grand, donc je préfère ne pas le faire. En outre, puisque cela fonctionne dans le fichier sqllte plus, je doute que mes appareils sont le problème. –
Je pense toujours que votre noyau est arrêté/redémarré entre les deux.Pour savoir où, vous pouvez ajouter 'print (" bootKernel() appelé \ n "); debug_print_backtrace(); 'en haut de la fonction' bootKernel() 'dans' vendeur/symfony/symfony/src/Symfony/paquet/FrameworkBundle/Test/KernelTestCase.php', puis exécutez l'un des cas de test affectés. – aferber