【问题标题】:Using Laravel Sail with a separate testing database将 Laravel Sail 与单独的测试数据库一起使用
【发布时间】:2021-04-15 03:14:48
【问题描述】:

我使用 Laravel Sail 作为我的开发环境。根据docs

当 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 时可用?

编辑:

当我挖掘repository code时,我发现在构建mysql容器映像时正在创建数据库,但是it doesn't look like there's an option for creating multiple databases

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

【问题讨论】:

    标签: mysql docker laravel-sail


    【解决方案1】:

    将以下内容添加到services: 键下的docker-compose.yml,并将.env.testing 中的主机设置为mysql_test

      mysql_test:
        image: "mysql:8.0"
        environment:
          MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
          MYSQL_DATABASE: "${DB_DATABASE}"
          MYSQL_USER: "${DB_USERNAME}"
          MYSQL_PASSWORD: "${DB_PASSWORD}"
          MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
        networks:
          - sail
    

    【讨论】:

    • 我已经尝试过了,但是我不确定它是否会加载到 .env.testing var 中?似乎 docker-compose.yml 只需要 .env 变量,所以 sql_test 数据库实际上并没有使用 env.testing 中定义的变量来设置它吗?
    • .env.testing 在您运行sail test 时用于告诉您的应用连接到哪个数据库
    • @DeanCollins 对,.env 文件正在加载,这就是${DB_DATABASE} 的定义。您可以将数据库名称硬编码到 mysql_test 容器配置中,或者让它们使用相同的数据库名称(这很好,因为它们是不同的容器)。
    【解决方案2】:

    您应该能够在现有 mysql 容器上与原始 dev 数据库一起创建 test 数据库:

    sail mysql
    
    mysql> CREATE DATABASE test;
    

    我没有使用 mysql 对此进行测试,但同样的过程适用于 postgres:

    sail psql
    
    dev=# CREATE DATABASE test;
    

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2019-08-05
      • 2016-03-30
      • 2018-04-11
      • 2020-12-03
      • 1970-01-01
      相关资源
      最近更新 更多