我想修改DB ::連接,所以如果我正在運行測試它將覆蓋給定的連接。Laravel - 修改DB ::連接方法
我有像這個DB :: connection('mysql2')這樣的模型中有很多硬編碼的連接,所以我想用mysql_testing覆蓋mysql2連接。
我該怎麼辦?
我想修改DB ::連接,所以如果我正在運行測試它將覆蓋給定的連接。Laravel - 修改DB ::連接方法
我有像這個DB :: connection('mysql2')這樣的模型中有很多硬編碼的連接,所以我想用mysql_testing覆蓋mysql2連接。
我該怎麼辦?
我最常做的是增加在phpunit.xml
:在config/database.php
<env name="DB_CONNECTION" value="mysql_testing"/>
然後,我創建的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');
}
我還沒有嘗試過,但它應該工作 - 它應該作出這樣的運行時測試您可以將所有連接設置爲相同的測試數據庫(如果您願意,也可以設置爲其他數據庫)
不要這樣做。 'phpunit.xml'文件可以讓你在運行測試時覆蓋任何'.env'值,通過像' '這樣的東西。覆蓋'DB_CONNECTION'環境變量並擁有它。 –
ceejayoz