2014-12-12 9 views
10

Ich habe eine Laravel 5 App mit zwei Umgebungen und zwei Konfigurationen: Testen (für PHPUnit Konfiguration, In-Memory-db) und lokal (meine Entwicklungskonfiguration).Laravel 5 App immer mit 'Test' Umgebungskonfiguration

Auch wenn die Umgebung als local konfiguriert ist, lädt die Anwendung nur die Konfiguration in den Ordner resources/config/testing. Ich kann die Umgebung in der gleichen App von der Umgebungsvariablen APP_ENV sehen, und es ist local.

  • Sollte ich gerade kein Testkonfigurationsverzeichnis für die Konfiguration meiner Tests verwenden?

  • Wie kann ich meine Testumgebung in Laravel 5 besser konfigurieren?

  • +0

    teilen Sie bitte Ihre Umgebung Einstellungen Code – carousel

    +0

    meine .env-Datei enthält nur grundlegende Sachen wie 'APP_ENV = local' - Ich werde in die vollständige Datei kopieren, wenn ich von der Arbeit nach Hause komme –

    Antwort

    25

    Laravel 5 kaskadiert die Konfigurationsdateien nicht mehr korrekt, so dass Ihre Testkonfigurationsdatei alles überschreibt, was Sie in Ihrer lokalen Konfigurationsdatei haben.

    Jetzt sollten Sie keine Unterordner für jede Umgebung haben, sondern Konfigurationseinstellungen innerhalb der .env-Datei im Stammordner vornehmen.

    Diese Datei wird nicht in den Repo eingecheckt, um sicherzustellen, dass keine vertraulichen Informationen in den Repo eingecheckt sind. Sie sollten eine separate .env-Datei für jede Umgebung, in der Ihre Anwendung lebt, haben.

    TESTEN

    Für PHP-Einheit (funktionale) Sie env Variablen in der phpunit.xml Datei zB festlegen.

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

    Für Behat (Annahme) die Prüfung der Laracasts Laravel Behat Erweiterung ermöglicht es Ihnen Erstellen einer .env.behat-Datei zum Ändern der Umgebungsvariablen

    Für phpspec (Einheit) Test gut die Umgebung sollte nicht als Ihr Test einzelnen Methoden isoliert und alles andere verspotten.

    Für Selenium (Integration/System/e2e) testen sollten die Umgebungsvariablen aus der .env-Datei auf dem Server kommen, wo immer Sie diese Tests durchführen.

    +0

    Vielen Dank. –

    +0

    Ich verwende phpunit für meine Integrationstests, daher muss ich eine separate Datenbank verwenden. Das löst mein Problem, danke! –

    +0

    Upvoted, würde aber gerne eine Lösung für die Codeception sehen. –

    16

    Zusätzliche Punkte Ich hatte nur Tests auf SQLite zum Laufen zu bekommen zu verwenden, während der Haupt-App normalerweise standardmäßig auf mysql:

    so etwas zu phpunit.xml hinzufügen, wie craig.michael.morris erklärt :

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

    Und diese Änderung config/database.php

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

    Und im 'sqlite' Abschnitt config/Datenbank.php

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

    Danke für die Antwort: Auf Laravel 5.1 anstelle von 'DB_DRIVER' musste ich' DB_CONNECTION' so verwenden: '' Ich habe diesen Wert aus der 'config/database .php' Datei. – racl101

    +0

    Das habe ich vor ein paar Tagen selbst herausgefunden, dann ist es passiert, dass du auf deinen Kommentar gestoßen bist :) Habe eine Verbesserung! – markdwhite

    3

    1) Öffnen Sie die Konfigurationsdatei database.php und fügen Sie folgendes in der 'connections' => [

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

    diese im Speicher SQLite wird

    2) öffnen Sie die .env Datei für Ihre Tests verwendet werden und stellen Sie sicher, dass es folgendes hat:

    DB_CONNECTION=mysql 
    

    3) offen phpunit.xml und fügen Sie folgende in dem <php> tag:

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

    hier, wo Sie alle Tests bezogenen Variablen env hinzufügen

    4) in Ihren Tests waren Sie eine Datenbankverbindung verwenden, um die Datenbank verwenden Migration Trait:

    use DatabaseMigrations; 
    

    , um weitere Informationen über die DatabaseMigrations finden Sie in der Dokumentation https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test