【发布时间】:2020-01-04 20:10:25
【问题描述】:
我已经通过 Docker 毫无问题地设置了 PHP/MySQL/Apache/Laravel 堆栈,一切正常运行。我还在 PhpStorm 中设置了 Docker:一切正常。
现在我正在尝试在 PhpStorm 中设置 PHPUnit,这是我以前从未设置过的,尤其是使用 Docker 容器时,所以错误可能非常简单,我只是不明白哪里出了问题 :(
当我运行任何测试(肯定运行良好)时,我会收到此类错误:
看起来数据库连接设置有问题,但我不明白出了什么问题,因为主应用程序使用的唯一变化是数据库名称,并且具有此名称的数据库肯定存在。两个数据库都使用相同的主机、用户名、密码、端口等,并且用户root 有权为所欲为:
这是我在 PhpStorm 中设置 PHPUnit 的方法。如您所见,phpunit.xml 的路径已设置好,一切看起来都不错
这里是.env
DB_CONNECTION=mysql
DB_HOST=xcard_db
DB_PORT=3306
DB_DATABASE=xcard
DB_TEST_DATABASE=xcard_test
DB_USERNAME=root
DB_PASSWORD=jackjack
这是 Laravel 的config/database.php,你可以看到我使用的是DB_TEST_DATABASE,这是唯一的区别(我已经清理了一些不必要的设置,有没有错误都是一样的):
'xcard_test' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_TEST_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('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'),
]) : [],
],
这是我的phpunit.xml,我在其中使用DB_CONNECTION="xcard_test"。可能我在这个 xml 文件中使用了错误的变量,应该使用 DB_CONNECTION 以外的其他变量?或者也许我没有在某个地方设置什么?
也许 PHPUnit 不知道xcard_test 是什么以及在哪里可以找到这个连接设置?
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="xcard_test"/>
<server name="LOG_CHANNEL" value="test"/>
</php>
</phpunit>
最后我运行了这两个命令(不是生产环境,只是以防万一)
artisan config:clear
artisan config:cache --env=xcard_test
【问题讨论】:
标签: laravel docker laravel-5 phpunit phpstorm