Laravel UnitTest -> 环境变量完全被忽略

问题描述 投票:0回答:3

我快要疯了!

我在 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

谢谢!

laravel phpunit
3个回答
0
投票

感谢马塞尔·桑廷!经过我所有的尝试和不同的方法,我只是没有运行

php artisan optimize:clear
,这造成了差异。


0
投票

您需要检查您的 docker-compose.yml 是否有:

- env_file: .env

这意味着 Laravel 中使用的所有 .env 变量都将与容器共享,例如环境变量。每次您尝试运行测试时,容器都会使用基于项目中的 .env 的 APP_ENV,该项目默认情况下可能具有“local”。它会阻止您的 phpunit.xml 被读取。这是我的情况...


0
投票

这对我来说是工作

在您的

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.