首页 > 解决方案 > Laravel 与 Docker:测试时选择了错误的数据库

问题描述

我的码头集装箱是这样的:

我在worklog_laravel_db容器中设置了两个数据库:

现在,我正在通过容器为我的应用程序编写docker exec -it bash测试worklog_laravel_app

我已经将 my 设置env.testing为具有与 相同的变量.env,除了:

但运行测试最终仍会选择本地开发数据库 ( worklog)。

为什么会这样?我该如何解决这个问题?


编辑1:

我通过观察worklog在运行测试后删除表中的种子数据以及auto_increments每次运行测试时这些表的变化来验证这一点。


编辑2:

忘了提一下,我的 Docker 设置遵循 DigitialOcean 的设置


编辑3:

我的.env.testing变量:

APP_NAME="Work Log"
APP_ENV=testing
APP_KEY={}
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=worklog_laravel_db
DB_PORT=3306
DB_DATABASE=worklog_test
DB_USERNAME=local
DB_PASSWORD={}

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

标签: dockertestinglaravel-5docker-composephpunit

解决方案


首先,确保您的测试环境被调用.env.testing,然后确保在您在 TestCase.php 文件中指定的createApplication()方法下的 TestCase.php 文件中指定以下行:

$app->loadEnvironmentFrom('.env.testing');

确保将其放在引导加载之前,否则它将无法正常工作。您的 createApplication 方法应如下所示:

public function createApplication()
    {
        $app->loadEnvironmentFrom('.env.testing');

        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();

        return $app;
    }

推荐阅读