TestCase.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace Tests;
  3. use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
  4. abstract class TestCase extends BaseTestCase
  5. {
  6. /**
  7. * 测试环境变量:与 phpunit.xml 的 <env> 保持一致。
  8. *
  9. * 必须在这里(Laravel bootstrap 之前)把这些值同时写入 putenv / $_ENV / $_SERVER。
  10. * 原因:Laravel 的 Env::get() 通过 Dotenv 的多 adapter 仓库读取,优先级是
  11. * $_SERVER > $_ENV > getenv;而 PHPUnit 的 <env> 只写 putenv 与 $_ENV、不写 $_SERVER,
  12. * 导致 .env 里的 DB_DATABASE(wikipali)在 $_SERVER 里胜出,测试会连到开发库,
  13. * RefreshDatabase 的 migrate:fresh 会直接清空开发库数据。
  14. *
  15. * @var array<string, string>
  16. */
  17. private const TEST_ENV = [
  18. 'APP_ENV' => 'testing',
  19. 'APP_MAINTENANCE_DRIVER' => 'file',
  20. 'BCRYPT_ROUNDS' => '4',
  21. 'BROADCAST_CONNECTION' => 'null',
  22. 'CACHE_STORE' => 'array',
  23. 'DB_CONNECTION' => 'pgsql',
  24. 'DB_DATABASE' => 'mint_test',
  25. 'DB_URL' => '',
  26. 'MAIL_MAILER' => 'array',
  27. 'QUEUE_CONNECTION' => 'sync',
  28. 'SESSION_DRIVER' => 'array',
  29. 'PULSE_ENABLED' => 'false',
  30. 'TELESCOPE_ENABLED' => 'false',
  31. 'NIGHTWATCH_ENABLED' => 'false',
  32. ];
  33. public function createApplication()
  34. {
  35. foreach (self::TEST_ENV as $key => $value) {
  36. putenv("{$key}={$value}");
  37. $_ENV[$key] = $value;
  38. $_SERVER[$key] = $value;
  39. }
  40. return parent::createApplication();
  41. }
  42. }