【发布时间】:2016-05-15 14:41:00
【问题描述】:
如何在不每次编辑.env文件的情况下,在本地系统上更改数据库进行开发和测试?
因此,我发现练习 TDD 很不方便。
Laravel 应用程序是否可以区分正常的开发和测试,以便选择合适的数据库?
【问题讨论】:
-
这正是 .env 文件的用途。您只需保留几个文件,将一个放在实时服务器上,然后为开发选择您需要的 env 文件。
如何在不每次编辑.env文件的情况下,在本地系统上更改数据库进行开发和测试?
因此,我发现练习 TDD 很不方便。
Laravel 应用程序是否可以区分正常的开发和测试,以便选择合适的数据库?
【问题讨论】:
编辑config\database.php 文件并将testing - 数组添加到connections 数组中:
'connections' => [
'testing' => [
'driver' => env('DB_TEST_DRIVER'),
// more details on your testing database
]
]
然后将必要的变量添加到您的.env-文件中。
打开您的phpunit.xml-文件并在您的<php>-tag 中添加以下内容:
<env name="DB_CONNECTION" value="testing"/>
现在 PHPUnit 将在您在 testing - 数组中定义的数据库上运行测试。
【讨论】:
config\database.php。我所要做的就是从phpunit.xml 设置DB_CONNECTION 环境变量,这是您解决方案的后期部分。所以我现在拥有的是我的 phpunit.xml 中的<php><env name="DB_CONNECTION" value="sqlite"></env></php>
您可以为每种类型的测试使用不同的 .env 文件。您可以像这样修改您的 tests/functional.suite.yml 和 tests/unit.suite.yml :
class_name: FunctionalTester
modules:
enabled: [Laravel5, FunctionalHelper, Asserts]
config:
Laravel5:
environment_file: .env.testing
还有这个:
class_name: UnitTester
modules:
enabled: [Asserts, UnitHelper, Laravel5]
config:
Laravel5:
environment_file: .env.unittesting
或者您可以简单地修改您的 phpunit.xml 并像上面的 @Tijmen 那样添加环境变量。
【讨论】:
如果您的测试数据库使用相同的配置但只是名称不同,则只需通过添加更改选定的数据库名称就足够了
<env name="DB_DATABASE" value="testing_db_name"/>
到<php>节点中的文件phpunit.xml
【讨论】:
对于 Laravel 5.5,正确的做法是创建一个名为 .env.testing 的测试环境文件。在这里,您可以定义您的测试环境,包括您要用于测试的数据库...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test DB
DB_USERNAME=test DB user
DB_PASSWORD=test DB password
然后运行这个命令...
php artisan config:cache --env=testing
这会将缓存配置为 .env.testing 文件参数。
Here 是文档的链接。
【讨论】:
如果您的单元测试之一需要特定数据库,请在单元测试开始时添加此代码
$connections = config('database.connections');
$connections['single_test_database_connection'] = [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => 'single_test_database',
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
];
config()->set('database.connections', $connections);
config()->set('database.default', 'single_test_database_connection');
【讨论】:
对于那些想要使用 sqlite 进行测试的人
创建测试环境文件和test.sqlite文件
> cp .env .env.testing
> touch test.sqlite
在 .env.testing 文件中
DB_CONNECTION=sqlite
DB_DATABASE=./test.sqlite
紧随其后
php artisan config:cache --env=testing
现在再次迁移您的数据库
php artisan migrate
如果你需要,那就播种
php artisan db:seed
无论何时你想使用本地环境,运行
php artisan config:cache --env=local
请注意,环境名称可以在 .env 文件中找到为
APP_ENV=local
【讨论】: