2017-10-11 3 views
0

Ich möchte DB :: Verbindung so ändern, wenn ich Tests durchführe, wird es eine gegebene Verbindung überschreiben.Laravel - Modify DB :: Verbindungsmethode

Ich habe viele fest codierte Verbindungen in den Modellen wie dieser DB :: connection ('mysql2'), also möchte ich die mysql2 Verbindung mit mysql_testing überschreiben.

Wie kann ich darüber gehen?

+0

Tun Sie dies nicht. Mit der Datei 'phpunit.xml' können Sie' 'env''-Werte überschreiben, während Sie Tests ausführen, etwa durch' '. Überschreiben Sie die Umgebungsvariable 'DB_CONNECTION' und haben Sie sie. – ceejayoz

Antwort

1

Was ich in der Regel tun, ist die Zugabe in phpunit.xml:

<env name="DB_CONNECTION" value="mysql_testing"/> 

Dann in config/database.php ich erstellen Duplikat mysql Verbindung etwas wie folgt aus:

'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, 
], 

und dann in .env I Testverbindungseinstellungen zu definieren:

#TESTING 

DB_TESTING_HOST=127.0.0.1 
DB_TESTING_DATABASE=test_database 
DB_TESTING_USERNAME=root 
DB_TESTING_PASSWORD=pass 

Es funktioniert ohne Probleme und Sie brauchen nichts in .env zu wechseln, wenn Sie Tests laufen und Testen Anwendung manuell auf derselben Maschine/in demselben Verzeichnis

EDIT

Wenn Sie Situation wie dieser , wahrscheinlich mehrere Modelle zu modifizieren ist nicht der beste Weg, aber wenn Sie möchten, unabhängig von Verbindung derselben Datenbank verwenden, setzen Sie so etwas tun:

Angenommen, Sie Umgebung zu testen gesetzt haben, was getan werden kann, mit:

<env name="APP_ENV" value="testing"/> 

in Ihrer phpunit.xml Datei können Sie in Ihre AppServiceProvider Klasse gehen Sie und in register Methode etwas tun, wie folgt aus:

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'); 
} 

Ich habe es nicht ausprobiert, aber es sollte funktionieren - es sollte das machen beim Laufen Tests können Sie alle Ihre Verbindungen auf die gleiche Test-Datenbank (oder auf andere Datenbanken, wenn Sie möchten) setzen

+0

Das Problem damit ist, ich habe viele fest codierte Verbindungen in den Modellen wie dieser DB :: connection ('mysql2'), also möchte ich die mysql2-Verbindung mit mysql_testing überschreiben, die nicht funktioniert, indem Sie es einfach in phpunit setzen. xml – Jack

+0

@Jack Bitte schauen Sie sich meine aktualisierte Antwort an –

+0

Wird das nicht nur die Verbindung setzen, bis DB :: connection ('mysql2') aufgerufen wird? – Jack