我快要疯了!
我在 xampp
(not php artisan serve)
上有一个简单的本地 Laravel 设置,其中 mysql
运行良好。
现在我想设置 phpunit。我阅读了 Laravel 文档,阅读了大量的博客文章,最后发现了 YouTube。
我尝试使用
.env.testing
,在phpunit.xml
中配置了变量,我还在config/database.php
中尝试了不同的连接块
我可以做任何我想做的事,运行
php artisan config:cache
后,phpunit 仍然采用在 .env 中处于活动状态的数据库设置
即使我通过运行
.env.testing
直接传递 php artisan test --env=testing
,phpunit 仍然会获取 prod DB。
我错过了什么告诉 phpunit 在这个配置中获取另一个数据库并且不要忽略我在
.env.testing
或 phpunit.xml
上的 env 输入?
.env:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=
.env.测试:
DB_CONNECTION=mysql_testing
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mydb_test
DB_USERNAME=root
DB_PASSWORD=
phpunit.xml:
<server name="APP_ENV" value="testing"/>
<server name="DB_CONNECTION" value="mysql_testing"/>
<server name="DB_DATABASE" value="mydb_test"/>
配置/database.php:
'mysql' => [
'driver' => 'mysql',
'database' => env('DB_DATABASE', 'forge'),
...
]
'mysql_testing' => [
'driver' => 'mysql',
'database' => env('DB_DATABASE', 'forge'),
...
]
我有两个数据库:
mydb
和mydb_test
我也测试过这个版本:
配置/database.php:
'mysql' => [
'driver' => 'mysql',
'database' => env('DB_DATABASE', 'mydb'),
...
]
'mysql_testing' => [
'driver' => 'mysql',
'database' => env('DB_DATABASE_TEST', 'mydb_test'),
...
]
...与
DB_DATABASE_TEST=mydb_test
在我的 phpunit.xml
和 .env
Phpunit 仍然使用
mydb
谢谢!
感谢马塞尔·桑廷!经过我所有的尝试和不同的方法,我只是没有运行
php artisan optimize:clear
,这造成了差异。
您需要检查您的 docker-compose.yml 是否有:
- env_file: .env
这意味着 Laravel 中使用的所有 .env 变量都将与容器共享,例如环境变量。每次您尝试运行测试时,容器都会使用基于项目中的 .env 的 APP_ENV,该项目默认情况下可能具有“local”。它会阻止您的 phpunit.xml 被读取。这是我的情况...
在您的
TestCase.php
添加:
public function __construct(?string $name = null, array $data = [], $dataName = '')
{
parent::__construct($name, $data, $dataName);
if(config('app.env') != "testing") {
\Artisan::call('optimize:clear');
$this->createApplication();
}
}