使用Laravel sail未找到测试数据库

使用Laravel sail未找到测试数据库,laravel,docker,phpunit,Laravel,Docker,Phpunit,我第一次使用Laravel Sail,可以连接到我的数据库,也可以使用TablePlus连接到测试数据库,之后使用凭据主机:127.0.0.1,端口:3307,用户:test_root,密码:test_root。然而,当我跑的时候 sail test --testsuite Feature --filter=LoginAsTest 我得到: SQLSTATE[HY000][1049]未知数据库“test\u database”(SQL:在table\u type='BASE table'中显示

我第一次使用Laravel Sail,可以连接到我的数据库,也可以使用TablePlus连接到测试数据库,之后使用凭据主机:127.0.0.1,端口:3307,用户:test_root,密码:test_root。然而,当我跑的时候

sail test --testsuite Feature --filter=LoginAsTest
我得到:

SQLSTATE[HY000][1049]未知数据库“test\u database”(SQL:在table\u type='BASE table'中显示完整表)

在我的.env文件中,我有:

TEST_DB_CONNECTION=mysql
TEST_DB_HOST=mysql_test
TEST_DB_PORT=3306
TEST_DB_DATABASE=test_database
TEST_DB_USERNAME=test_root
TEST_DB_PASSWORD=test_root
我的docker-compose.yml有:

mysql:
    image: 'mysql:8.0'
    ports:
        - '${FORWARD_DB_PORT:-3306}:3306'
    environment:
        MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
        MYSQL_DATABASE: '${DB_DATABASE}'
        MYSQL_USER: '${DB_USERNAME}'
        MYSQL_PASSWORD: '${DB_PASSWORD}'
        MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    volumes:
        - 'sailmysql:/var/lib/mysql'
    networks:
        - sail
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
mysql_test:
  image: "mysql:8.0"
  ports:
    - '${FORWARD_DB_PORT:-3307}:3306'
  environment:
    MYSQL_ROOT_PASSWORD: "${TEST_DB_PASSWORD}"
    MYSQL_DATABASE: "${TEST_DB_DATABASE}"
    MYSQL_USER: "${TEST_DB_USERNAME}"
    MYSQL_PASSWORD: "${TEST_DB_PASSWORD}"
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  networks:
    - sail
有没有想过为什么我可以通过TablePlus连接,而不是我的应用程序

更新:我还添加了:

'mysql_test' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('TEST_DB_PORT', '3306'),
            'database' => env('TEST_DB_DATABASE', 'forge'),
            'username' => env('TEST_DB_USERNAME', 'forge'),
            'password' => env('TEST_DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
到我的config/database.php

在我的phpunit.xml中,我有:

 <env name="DB_CONNECTION" value="mysql_test"/>
 <env name="DB_DATABASE" value="test_database"/>

macOS上的docker容器在docker for mac创建的虚拟机内运行,流量通过虚拟机的网络接口路由

如中所述,macOS和docker引擎之间没有桥接。因此,尽管
docker ps
将显示端口已发布,但除非在
0.0.0
上明确发布,否则无法在macOS的
localhost
上访问容器

本文描述了运行在linux和macOS上的docker网络子系统之间的区别

要连接到容器,最简单的方法是使用机器的公共IP,因此在您的情况下:

  • 按照中的说明查找计算机的IP
  • 将连接字符串更改为
    'host' => env('DB_HOST', '<<your ip address>>'),
    'port' => env('TEST_DB_PORT', '3307'),
    
    “主机”=>env('DB_主机',''),
    'port'=>env('TEST_DB_port','3307'),
    

  • 我很确定在
    .env
    中,您的
    测试\u DB\u端口应该是
    3307
    。我已经尝试了上述方法,但我得到了相同的错误。作为另一项检查,我尝试了sail mysql,然后显示数据库;测试数据库没有出现。@Eric您在哪个容器中运行sail,从哪里进行测试?你从赛欧那里得到的错误是什么?(这里是Noob)我不确定你指的是哪个集装箱。我正在运行sail测试,错误为“SQLSTATE[HY000][2002]连接被拒绝(SQL:SHOW FULL TABLES WHERE table_type='BASE table')”,您在哪里运行sail?您是在容器中运行还是在主机上运行?我想是我的主机?我只是在命令行中输入sail-mysql;当我运行mysql时,当我键入SHOW databases时会出现非测试数据库;如果有帮助的话。虽然我可以通过TablePlus进行连接,但这只是一个没有出现的测试。
    'host' => env('DB_HOST', '<<your ip address>>'),
    'port' => env('TEST_DB_PORT', '3307'),