2015-04-08 2 views
7

Ich verwende Laravel 5 und Codeception und ich möchte eine In-Memory-Datenbank SQLite für meine Unit-Tests verwenden, aber ich kann nicht meine Umgebung zu bekommen scheine auf "Testen" in Codeception gesetzt. Ich bin mit dem Laravel5 Modul und in meiner unit.suite.yml Datei folgt definiert:Laravel 5 Testumgebung nicht in Codeception Einheit gesetzt zu werden testet

class_name: UnitTester 
modules: 
    enabled: [Asserts, UnitHelper, Laravel5] 
    config: 
     Laravel5: 
      environment_file: .env.testing 

Ich habe eine .env-Datei, die alle meine lokalen Einstellungen definiert, dann eine .env.testing Datei, die definiert, alle testspezifischen Einstellungen. Es scheint jedoch nie die Umgebung richtig einzustellen.

die Umwelt testen ich gerade tat:

$this->assertEquals('testing', \App::environment()); 

und ich bekomme immer:

Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-'testing' 
+'local' 

Wer noch keine Ahnung haben, was mache ich falsch?

Antwort

4

Haben Sie die Umgebungsnamen in Ihrer .env.testing-Datei?

APV_ENV=testing 
+0

Ja, ich habe diesen Satz sowie alle anderen Testspezifischen Variablen in meiner .env.testing Datei (glauben sie mir, ich habe überprüft und doppelt geprüft, dass viele Male!) – bb89

+0

So lädt es * jede * der Daten von Ihrem '.env.testing' Datei überhaupt? – Laurence

+0

Okay, so dass bizarr ... anscheinend alle Variablen werden immer von .env.testing richtig außer APP_ENV geladen. Das zeigt nach wie vor als ‚lokal‘ obwohl ich es auf ‚Test‘ ... Danke für mich immer, dass zu überprüfen, wie ich würde wahrscheinlich nicht in dem ausgesehen habe. Irgendeine Idee, warum das geschieht? – bb89

1

ich komplett neu bin Laravel, sondern nur festgestellt, dass der einzige Weg, Tests auf meinem lokalen Rechner zum Laufen zu bekommen und (zum Beispiel) Codeship ist .env Symlink, wenn ich es brauche. (Ich weiß - das ist nicht eine sehr saubere Art und Weise, aber hey, es funktioniert)

ich neben meinem lokalen .env Datei haben:

#.env.testing 
APP_ENV=testing 
DB_CONNECTION=default_mysql 
DB_DATABASE=test_db 
... etc 

Und:

#.env.codeship 
APP_ENV=codeship 
DB_CONNECTION=codeship 

für die lokale Tests habe ich einen Alias:

alias pl='rm .env; ln -s .env.testing .env; phpunit; rm .env; ln -s .env.local .env' 

Wo .env.local ac hält Opy meiner lokalen .env-Datei.

Und für Codeships Test-Pipeline:

ln -s .env.codeship .env 
php artisan migrate --seed 
phpunit 

Datenbankkonfiguration:

// CODESHIP 
'codeship' => [ 
    'driver' => 'mysql',   
    'username' => getenv('MYSQL_USER'), 
    'password' => getenv('MYSQL_PASSWORD'), 
    // etc   
], 

// LOCAL DEV // PHPUNIT 
'default_mysql' => [ 
    'driver' => 'mysql', 
    'username' => env('DB_USERNAME', 'localhost'), 
    'password' => env('DB_PASSWORD', 'forge'), 
    // etc   
], 

Wenn jemand bessere Ideen bekam, bin ich zu hören, glücklich.

1

Dies könnte sein, weil Sie die env-Datei in Ihrer globalen codeception Config definiert haben. In codeception.yml Datei in Ihrem Projekt Stammverzeichnis den Wert für params überprüfen, sollte etwas sein, wie folgende

params: 
    - .env.testing 
Verwandte Themen