2017-10-11 1 views
0

Je veux modifier la connexion DB :: donc si j'exécute des tests, il va remplacer une connexion donnée.Laravel - Modifier DB :: méthode de connexion

J'ai beaucoup de connexions codées en dur dans les modèles comme cette DB :: connection ('mysql2') donc je veux surcharger la connexion mysql2 avec mysql_testing.

Comment puis-je faire à ce sujet?

+0

Ne faites pas cela. Le fichier 'phpunit.xml' vous permet de remplacer toutes les valeurs' .env' lors de l'exécution de tests, via des éléments tels que ''. Remplacer la variable d'environnement 'DB_CONNECTION' et y avoir. – ceejayoz

Répondre

1

Ce que je habituellement ajoute à phpunit.xml:

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

Puis, en config/database.php je crée double de mysql quelque chose de connexion comme ceci:

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

puis dans .env je définis les paramètres de connexion de test:

#TESTING 

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

Il fonctionne sans aucun problème plus vous n'avez pas besoin de changer quoi que ce soit dans .env si vous effectuez des tests et de l'application test manuellement sur une même machine/dans le même répertoire

EDIT

Si vous avez ce genre de situation , probablement modifier plusieurs modèles ne sont pas la meilleure façon, mais si vous souhaitez utiliser même base de données quelle que soit la connexion défini, vous pouvez faire quelque chose comme ça:

en supposant que vous avez défini l'environnement pour tester ce qui peut être fait en utilisant:

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

dans votre fichier phpunit.xml que vous pouvez faire entrer dans votre AppServiceProvider classe et dans la méthode register faire quelque chose comme ceci:

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

Je n'ai pas essayé, mais il devrait fonctionner - il devrait faire que lors de l'exécution teste que vous pouvez définir toutes vos connexions à la même base de données de test (ou à d'autres bases de données si vous le souhaitez)

+0

Le problème avec cela est que j'ai beaucoup de connexions codées en dur dans les modèles comme DB :: connection ('mysql2') donc je veux remplacer la connexion mysql2 avec mysql_testing qui ne fonctionnera pas en le mettant simplement dans phpunit. xml – Jack

+0

@Jack Veuillez regarder ma réponse mise à jour –

+0

Est-ce que cela ne va pas seulement établir la connexion jusqu'à ce que DB :: connection ('mysql2') soit appelé? – Jack