如何配置Laravel用于使用数据库进行测试?

发布于 2025-01-27 20:53:31 字数 2934 浏览 3 评论 0原文

目前,我开始使用PHP Artisan测试时有错误的连接 •测试\ features \ apitest>指数 Illuminate \ database \ queryException

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed:   .  (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')

我使用docker,因此我与DB的连接看起来像

.env

    DB_CONNECTION=mysql
    DB_HOST=mysql
    DB_PORT=3306
    DB_DATABASE=laravel_api
    DB_USERNAME=sail
    DB_PASSWORD=password

database.php

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_api'),
            'username' => env('DB_USERNAME', 'sail'),
            'password' => env('DB_PASSWORD', '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'),
            ]) : []

phpunit.xml,

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
                bootstrap="vendor/autoload.php"
                colors="true"
            >
            <testsuites>
                <testsuite name="Unit">
                    <directory suffix="Test.php">./tests/Unit</directory>
                </testsuite>
                <testsuite name="Feature">
                    <directory suffix="Test.php">./tests/Feature</directory>
                </testsuite>
            </testsuites>
            <coverage processUncoveredFiles="true">
                <include>
                    <directory suffix=".php">./app</directory>
                </include>
            </coverage>
            <php>
                <env name="APP_ENV" value="testing"/>
                <env name="BCRYPT_ROUNDS" value="4"/>
                <env name="CACHE_DRIVER" value="array"/>
                <env name="DB_CONNECTION" value="mysql"/>
                <env name="MAIL_MAILER" value="array"/>
                <env name="QUEUE_CONNECTION" value="sync"/>
                <env name="SESSION_DRIVER" value="array"/>
                <env name="TELESCOPE_ENABLED" value="false"/>
            </php>
</phpunit>

有三个基本文件需要配置。当我要求向Postman要求时,一切都很好。我能做错什么?

For now I have error with connection when I start php artisan test
• Tests\Feature\ApiTest > index
Illuminate\Database\QueryException

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed:   .  (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')

I use docker so my connection to db looks like

.env

    DB_CONNECTION=mysql
    DB_HOST=mysql
    DB_PORT=3306
    DB_DATABASE=laravel_api
    DB_USERNAME=sail
    DB_PASSWORD=password

database.php

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_api'),
            'username' => env('DB_USERNAME', 'sail'),
            'password' => env('DB_PASSWORD', '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'),
            ]) : []

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
                bootstrap="vendor/autoload.php"
                colors="true"
            >
            <testsuites>
                <testsuite name="Unit">
                    <directory suffix="Test.php">./tests/Unit</directory>
                </testsuite>
                <testsuite name="Feature">
                    <directory suffix="Test.php">./tests/Feature</directory>
                </testsuite>
            </testsuites>
            <coverage processUncoveredFiles="true">
                <include>
                    <directory suffix=".php">./app</directory>
                </include>
            </coverage>
            <php>
                <env name="APP_ENV" value="testing"/>
                <env name="BCRYPT_ROUNDS" value="4"/>
                <env name="CACHE_DRIVER" value="array"/>
                <env name="DB_CONNECTION" value="mysql"/>
                <env name="MAIL_MAILER" value="array"/>
                <env name="QUEUE_CONNECTION" value="sync"/>
                <env name="SESSION_DRIVER" value="array"/>
                <env name="TELESCOPE_ENABLED" value="false"/>
            </php>
</phpunit>

There are three base file that need for config. When I did request to Postman, all works fine. What can I do wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文