我想修改DB :: connection,所以如果我正在运行测试,它将覆盖给定的连接。
我在模型中有很多硬编码连接,比如这个DB :: connection('mysql2'),所以我想用mysql_testing覆盖mysql2连接。
我该如何解决这个问题?
答案 0 :(得分:1)
我通常做的是添加phpunit.xml
:
<env name="DB_CONNECTION" value="mysql_testing"/>
然后在config/database.php
中,我创建了mysql
连接的副本,如下所示:
'mysql_testing' => [
'driver' => 'mysql',
'host' => env('DB_TESTING_HOST', 'localhost'),
'database' => env('DB_TESTING_DATABASE', 'forge'),
'username' => env('DB_TESTING_USERNAME', 'forge'),
'password' => env('DB_TESTING_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
然后在.env
我定义测试连接设置:
#TESTING
DB_TESTING_HOST=127.0.0.1
DB_TESTING_DATABASE=test_database
DB_TESTING_USERNAME=root
DB_TESTING_PASSWORD=pass
它没有任何问题,如果你在同一台机器/同一目录中手动运行测试和测试应用程序,则不需要在.env
中切换任何内容
修改强>
如果您遇到这种情况,可能修改多个模型并不是最好的方法,但如果您想使用相同的数据库,无论连接集如何,您都可以这样做:
假设您已设置环境以测试可以使用的方法:
<env name="APP_ENV" value="testing"/>
在phpunit.xml
文件中,您可以进入AppServiceProvider
课程,register
方法可以执行以下操作:
if ($this->app->environment('testing')) {
$this->app['config']->set('database.connections.mysql2.database', 'yourcustom testing database');
// ...
$this->app['config']->set('database.connections.mysql15.database', 'yourcustom testing database');
}
我没有尝试过,但它应该可行 - 它应该在运行测试时使你可以将所有连接设置为相同的测试数据库(如果你愿意,可以设置为其他数据库)