将 Laravel Sail 与单独的测试数据库一起使用

问题描述

我使用 Laravel Sail 作为我的开发环境。根据{{​​3}},

MysqL 容器启动时,它将确保存在一个名称与您的 DB_DATABASE 环境变量的值匹配的数据库

这非常适合我的开发环境,但在测试方面不是很多,因为我的 .env.testing 定义了一个单独的数据库,而且这个数据库似乎没有被创建 - 当我 sail MysqL 进入容器并运行 show databases; 它未列出。因此,运行 sail test 的每个测试都会失败。

sqlSTATE[HY000] [1045] Access denied for user ...

我的 .env 文件包含以下内容

DB_CONNECTION=MysqL
DB_HOST=MysqL
DB_PORT=3306
DB_DATABASE=dev

我的 .env.testing 文件包含以下内容

DB_CONNECTION=MysqL
DB_HOST=MysqL
DB_PORT=3306
DB_DATABASE=test

DB_USERNAMEDB_PASSWORD 在两个文件中是相同的。

如何创建此数据库,使其在运行 sail test 时可用?

编辑:

当我深入研究 docs 时,我发现在构建 MysqL 容器映像时正在创建数据库,但是 repository code

MysqL_DATABASE 此变量是可选的,允许您指定要在映像启动时创建的数据库名称。如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限(对应于 GRANT ALL)。

解决方法

您应该能够在现有 mysql 容器上与原始 int n;cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; while(n--) {a[n]-a[n-1];} 数据库一起创建 test 数据库:

dev

我没有使用 mysql 测试过这个,但同样的过程适用于 postgres:

sail mysql

mysql> CREATE DATABASE test;