2014-12-12 8 views
10

Ho un'app Laravel 5 con due ambienti e due configurazioni: testing (per la configurazione di PHPUnit, db in-memory) e locale (la mia configurazione di sviluppo).L'app Laravel 5 utilizza sempre la configurazione dell'ambiente "testing"

Anche quando l'ambiente è configurato per essere local, l'applicazione carica solo la configurazione nella cartella resources/config/testing. Riesco a vedere l'ambiente nella stessa app dalla variabile di ambiente APP_ENV ed è local.

  • Dovrei semplicemente non utilizzare una directory di configurazione di test per configurare i miei test?

  • Qual è un modo migliore per configurare il mio ambiente di test in Laravel 5?

+0

per favore condividi il tuo codice impostazioni ambiente – carousel

+0

il mio file .env contiene solo elementi di base come 'APP_ENV = local' - Copia il file completo quando torno a casa dal lavoro –

risposta

25

laravel 5 non cascata file di configurazione in modo corretto più così il file di configurazione di prova è prevalente qualsiasi cosa avete nel vostro file di configurazione locale.

Ora non si suppone di avere alcuna sottocartella per ogni ambiente, ma piuttosto di impostare le impostazioni di configurazione all'interno del file .env nella cartella principale.

Questo file non è archiviato sul repository per garantire che nulla sia controllato nel repository. Dovresti avere un file .env separato per ogni ambiente in cui si trova la tua applicazione.

TEST

Per l'unità php (funzionale) è possibile impostare le variabili env nel file phpunit.xml ad es.

<php> 
    <env name="APP_ENV" value="testing"/> 
    <env name="CACHE_DRIVER" value="array"/> 
    <env name="SESSION_DRIVER" value="array"/> 
</php> 

Per Behat (accettazione) testare l'estensione Laracasts laravel Behat consente per creare un file .env.behat per modificare le variabili di ambiente.

Per il test di phpspec (unità), l'ambiente non dovrebbe essere importante come testare separatamente i singoli metodi e prendere in giro tutto il resto.

Per il test del selenio (integrazione/sistema/e2e) le variabili di ambiente devono provenire dal file .env sul server, ovunque si stia eseguendo questo test.

+0

Grazie mille. –

+0

Uso phpunit per i miei test di integrazione, quindi ho bisogno di utilizzare un database separato. Questo risolve il mio problema, grazie! –

+0

In aumento, ma mi piacerebbe vedere una soluzione anche per Codeception. –

16

I luoghi ho appena avuto da utilizzare per ottenere i test in esecuzione su SQLite, mentre l'applicazione principale normalmente default di MySQL:

aggiungere qualcosa di simile a phpunit.xml, come spiegato da craig.michael.morris :

<env name="DB_DRIVER" value="sqlite"/> 

E questo cambiamento di config/database.php

'default' => env('DB_DRIVER', 'mysql'), 

e nella sezione 'sqlite' di config/database.php

'database' => ':memory:', 
+7

Grazie per la risposta: su Laravel 5.1 invece di 'DB_DRIVER' ho dovuto usare' DB_CONNECTION' in questo modo: '' Ho ottenuto questo valore dal 'config/database .php' file. – racl101

+0

L'ho scoperto un paio di giorni fa, poi mi è capitato di imbattermi nel tuo commento :) Avere un upvote! – markdwhite

3

1) aprire il file di configurazione database.php e aggiungere il seguente all'interno del 'connections' => [

'sqlite_testing' => [ 
    'driver' => 'sqlite', 
    'database' => ':memory:', 
    'prefix' => '', 
], 

questo SQLite memoria viene utilizzata per il test

2) aprire il file .env e assicurarsi che sia il seguente:

DB_CONNECTION=mysql 

3) aperto phpunit.xml e aggiungere il seguente all'interno del tag <php>:

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

ecco dove è possibile aggiungere tutte le variabili env connessi test

4) nei test erano si utilizza una connessione al database utilizzare il database migrazione Trait:

use DatabaseMigrations; 

per ulteriori dettagli sulle DatabaseMigrations fare riferimento alla documentazione https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test