【发布时间】:2021-11-19 16:55:11
【问题描述】:
我有一个laravel项目eith6如下配置:
return [
'default' => env('DB_CONNECTION', 'default'),
'connections' => [
'default' => [
'driver' => 'pgsql',
'read' => [
'host' => env('DB_HOST_READ', '192.168.10.70'),
],
'write' => [
'host' => env('DB_HOST_WRITE', '192.168.10.70'),
],
'port' => env('DB_PORT', '5432'),
'database' => env('DB_NAME', 'default'),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
'timezone' => 'Europe/Athens',
],
]
];
我想在运行 phpunit 时指定测试数据库的设置。因此我在 phpunit.xml 中对其进行了硬编码
<?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="default">
<directory suffix="Test.php">./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_DEBUG" value="false"/>
<env name="DB_NAME" value="test" />
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="MAIL_DRIVER" value="array"/>
</php>
</phpunit>
我做了以下测试:
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
class SampleTest extends BaseTestCase
{
public function testSettings()
{
dump(config('database.connections.default'));
dump(env('DB_NAME'));
}
}
但是返回如下结果:
array:4 [
"default" => array:12 [
"driver" => "pgsql"
"read" => array:1 [
"host" => "192.168.10.70"
]
"write" => array:1 [
"host" => "192.168.10.70"
]
"port" => "5432"
"database" => "default"
"username" => ""
"password" => ""
"charset" => "utf8"
"prefix" => ""
"schema" => "public"
"sslmode" => "prefer"
"timezone" => "Europe/Athens"
]
]
"test"
那么在环境返回预期值的情况下,为什么设置配置错误?以及为什么 env 不评估设置中的适当值?
不管 .env 怎么说,在测试期间是否可以强制配置值?
【问题讨论】:
标签: php laravel phpunit laravel-5.8