Rumah > Soal Jawab > teks badan
P粉9523651432023-08-27 15:05:56
Nampaknya semasa menguji adalah tidak mungkin untuk mengendalikan pangkalan data dalam memori menggunakan fail dump skema
https://laravel.com/docs/9.x/migrations#squashing-migrations
Boleh cuba ni
DB::unprepared(file_get_contents("path/file.sql"));
Cuba sahaja sebagai pilihan terakhir Secara peribadi, adalah disyorkan untuk berhijrah dalam persekitaran ujian Jika anda menggunakan kaedah ini, anda juga harus menambah cek untuk migrasi dalam persekitaran ujian
P粉8212742602023-08-27 12:58:12
Saya akhirnya faham.
Masalahnya ialah persekitaran ujian tidak disediakan dengan betul. Saya tidak menemui punca sebenar, tetapi saya menemui cara untuk menyediakan persekitaran ujian supaya fail dump ditemui dan dimuatkan.
Ini menerangkan langkah-langkah yang saya ambil untuk mencari penyelesaiannya.
database.php
Saya menyalin pangkalan data ujian dan bukannya pangkalan data biasa database.php
Saya mempunyai sambungan pangkalan data utama: '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'), ]) : [], ],
dan uji sambungan
'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
bersambung hanya untuk melihat sama ada saya mendapat hasil yang sama pada baris arahan'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
, saya akan menerangkannya sekarang phpunit.xml
phpunit.xml
Nampak begini (fail penuh tidak ditunjukkan di sini):
<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
menjadi <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
dan mengalih keluar pembolehubah usang yang berkaitan daripada fail .env
Walaupun saya tidak menemui punca sebenar Laravel tidak memuatkan fail dump, saya menemui jalan penyelesaian dengan menukar nama pangkalan data hanya untuk ujian dan bukannya menentukan sambungan SQL yang baharu sepenuhnya untuk tujuan ujian. Ini membetulkan isu dan kini fail dump pangkalan data dimuatkan semasa ujian.