From 37140554d3ad600dc8fb0b5c57a7f4721e2321ac Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 12 Jun 2026 00:25:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(test):=20=E9=98=B2=E6=AD=A2=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E5=85=A7=E6=B8=AC=E8=A9=A6=E6=B8=85=E7=A9=BA=E9=96=8B?= =?UTF-8?q?=E7=99=BC=E7=94=A8=20MySQL=E2=80=94=E2=80=94bootstrap=20?= =?UTF-8?q?=E5=BC=B7=E5=88=B6=E8=A6=86=E8=93=8B=20$=5FSERVER?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:docker compose 將 DB_CONNECTION=mysql 注入為真實環境變數, PHPUnit 的 只覆蓋 $_ENV/putenv,但 Laravel env() 優先讀 $_SERVER,導致 RefreshDatabase 一直在清空開發 DB(今日實際發生三次, 也是先前『DB 神秘清空』的元凶)。 - 新增 tests/bootstrap.php 於載入前同步覆蓋 $_SERVER/$_ENV/putenv - phpunit.xml bootstrap 指向新檔,DB env 加 force 屬性 - 驗證:容器內全套件後 MySQL 資料存活(users=13) Co-Authored-By: Claude Fable 5 --- phpunit.xml | 9 ++++++--- tests/bootstrap.php | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 tests/bootstrap.php diff --git a/phpunit.xml b/phpunit.xml index 61c031c..c258bf1 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,7 @@ @@ -22,8 +22,11 @@ - - + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..09e35ac --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,13 @@ + 只覆蓋 $_ENV / putenv,而 Laravel env() 透過 +// phpdotenv 優先讀 $_SERVER——導致容器內跑測試時 RefreshDatabase 直接清空 +// 開發用 MySQL(2026-06-12 實際發生三次)。必須在 bootstrap 階段三者同步強制。 +foreach (['DB_CONNECTION' => 'sqlite', 'DB_DATABASE' => ':memory:'] as $key => $value) { + $_SERVER[$key] = $value; + $_ENV[$key] = $value; + putenv("{$key}={$value}"); +} + +require __DIR__ . '/../vendor/autoload.php';