Maison > Questions et réponses > le corps du texte
P粉9523651432023-08-27 15:05:56
On dirait que lors des tests, il n'est pas possible d'exploiter une base de données en mémoire à l'aide d'un fichier de vidage de schéma
https://laravel.com/docs/9.x/migrations#squashing-migrations
Vous pouvez essayer ceci
DB::unprepared(file_get_contents("path/file.sql"));
Essayez-le uniquement en dernier recours. Personnellement, il est recommandé de migrer dans l'environnement de test. Si vous adoptez cette méthode, vous devez également ajouter une vérification de migration dans l'environnement de test
.P粉8212742602023-08-27 12:58:12
J'ai enfin compris.
Le problème est que l'environnement de test n'est pas configuré correctement. Je n'ai pas trouvé la cause exacte, mais j'ai trouvé comment configurer l'environnement de test pour que le fichier de vidage soit trouvé et chargé.
Ceci décrit les étapes que j'ai suivies pour trouver la solution.
database.php
j'ai copié la base de données de test au lieu de la base de données normale database.php
j'ai la connexion à la base de données principale : 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
et tester la connexion
'testing' => [ 'driver' => 'mysql', 'host' => env('DB_TEST_HOST', '127.0.0.1'), 'port' => env('DB_TEST_PORT', '3306'), 'database' => env('DB_TEST_DATABASE', 'forge'), 'username' => env('DB_TEST_USERNAME', 'forge'), 'password' => env('DB_TEST_PASSWORD', ''), ],
testing
连接数据复制到一个新的mysql
me connecter juste pour voir si j'obtiens les mêmes résultats sur la ligne de commande'mysql' => [ 'url' => env('DATABASE_URL'), 'driver' => 'mysql', 'host' => env('DB_TEST_HOST', '127.0.0.1'), 'port' => env('DB_TEST_PORT', '3306'), 'database' => env('DB_TEST_DATABASE', 'forge'), 'username' => env('DB_TEST_USERNAME', 'forge'), 'password' => env('DB_TEST_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], /*'testing' => [ 'driver' => 'mysql', 'host' => env('DB_TEST_HOST', '127.0.0.1'), 'port' => env('DB_TEST_PORT', '3306'), 'database' => env('DB_TEST_DATABASE', 'forge'), 'username' => env('DB_TEST_USERNAME', 'forge'), 'password' => env('DB_TEST_PASSWORD', ''), ],*/
php artisan:migrate
phpunit.xml
, je vais l'expliquer maintenant phpunit.xml
phpunit.xml
Ressemble à ceci (fichier complet non affiché ici) :
<server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="TELESCOPE_ENABLED" value="false"/> <env name="DB_CONNECTION" value="testing"/> </php> </phpunit>
phpunit.xml
est devenu <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="TELESCOPE_ENABLED" value="false"/> <env name="DB_DATABASE" value="cinema_test"/> </php> </phpunit>
database.php
中删除了测试连接,并从.env
et supprimé les variables obsolètes pertinentes du fichier .env
Bien que je n'aie pas trouvé la cause réelle du non-chargement du fichier de vidage par Laravel, j'ai trouvé une solution de contournement en modifiant le nom de la base de données juste à des fins de test au lieu de définir une toute nouvelle connexion SQL à des fins de test. Cela a résolu le problème et le fichier de vidage de la base de données est désormais chargé pendant les tests.