如何更改数据库以便在本地系统上进行开发和测试而不必每次都编辑.env
文件?
由于这个原因,我发现练习 TDD 非常不方便。
Laravel 应用程序是否可以区分正常开发和测试,以便它可以选择适当的数据库?
答案 0 :(得分:31)
修改config\database.php
文件,并在testing
数组中添加connections
- 数组:
'connections' = [
'testing' = [
'driver' => env('DB_TEST_DRIVER'),
// more details on your testing database
]
]
然后将必要的变量添加到.env
- 文件。
打开phpunit.xml
- 文件,在<php>
- 标记中添加以下内容:
<env name="DB_CONNECTION" value="testing"/>
现在PHPUnit将运行您在testing
- 数组中定义的数据库上的测试。
答案 1 :(得分:26)
对于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是文档的链接。
答案 2 :(得分:6)
如果您的测试数据库使用相同的配置但只是它的名称不同,则只能通过添加
来更改所选的数据库名称<env name="DB_DATABASE" value="testing_db_name"/>
到phpunit.xml
节点
<php>
答案 3 :(得分:0)
如果您的某个单元测试需要特定的数据库,请在单元测试开始时添加此代码
$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');
答案 4 :(得分:0)
对于那些想要使用sqlite进行测试的人
创建测试环境文件和test.sqlite文件
ItemSource
在.env.testing文件中
> cp .env .env.testing
> touch test.sqlite
之后
DB_CONNECTION=sqlite
DB_DATABASE=./test.sqlite
现在再次迁移数据库
php artisan config:cache --env=testing
如果需要,请播种
php artisan migrate
只要您想使用本地环境,就运行
php artisan db:seed
请注意,.env文件中的环境名称可以是
php artisan config:cache --env=local
= local
答案 5 :(得分:-1)
您可以为每种类型的测试使用不同的.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那样的环境变量。