docker - Laravel 与 Docker:测试时选择了错误的数据库
问题描述
我的码头集装箱是这样的:
worklog_laravel_app
(Laravel 应用程序)worklog_laravel_web
(Nginx)worklog_laravel_db
(MySQL)
我在worklog_laravel_db
容器中设置了两个数据库:
worklog
worklog_test
现在,我正在通过容器为我的应用程序编写docker exec -it
bash
测试worklog_laravel_app
。
我已经将 my 设置env.testing
为具有与 相同的变量.env
,除了:
APP_ENV=testing
DB_DATABASE=worklog_test
但运行测试最终仍会选择本地开发数据库 ( 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}"
解决方案
首先,确保您的测试环境被调用.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;
}
推荐阅读
- jquery - 在每 6 个列表项之后添加 CTA,从第 4 号开始每 6 个添加另一个 CTA 广告(jQuery)
- apache-spark - SPARK STREAMING:我想做一些流式练习,如何获得好的流式数据源?
- flutter - 创建 Flutter 库以同时支持 Web 和移动设备
- php - Php 数组,循环通过“父”
- python - python多处理池运行速度较慢?
- php - Laravel 5.5 - 记住我和自定义会话值问题
- c# - 如何使用 ASP.NET CORE 3 在 Linux (Debian) 上保存图像
- reactjs - NPM 错误!我运行创建反应应用程序时的代码完整性
- qt - 如何从主页文本字段为第二页文本字段设置值
- mysql - 处理(非)现有数据