2017-03-27 1 views
5

Ich benutze Dusk, um einen einfachen Login-Test zu machen.Wie erstellt man .env-Datei für den Test mit Laravel Dusk

Ich habe eine .env.dusk-Datei erstellt, sodass der Test eine alternative Datenbank verwendet und die auf der Plattform registrierten Daten nicht gelöscht werden.

Archiv .env

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=laravel_dusk 
DB_USERNAME=root 
DB_PASSWORD=123456 

Archiv .env.dusk

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=laravel_dusk_test 
DB_USERNAME=root 
DB_PASSWORD=123456 

LoginTest.php

namespace Tests\Browser; 

use Tests\DuskTestCase; 
use Illuminate\Foundation\Testing\DatabaseMigrations; 

class LoginTest extends DuskTestCase 
{ 
    use DatabaseMigrations; 
    /** 
    * A Dusk test example. 
    * 
    * @return void 
    */ 
    public function testLogin() 
    { 
     $user = factory(\App\User::class)->create(['email' => '[email protected]']); 

     $this->browse(function ($browser) use ($user) { 
      $browser->visit('/login') 
        ->type('email', $user->email) 
        ->type('password', 'secret') 
        ->press('Login') 
        ->assertPathIs('/home'); 
     }); 
    } 
} 

Aber wenn ich die Tests laufen sie nicht die Datenbank ändern, und es Löscht alle Daten aus der Datenbank, die in der Anwendung verwendet werden.

Wie kann ich dieses Problem lösen?

Antwort

3

Sie müssen einen Umgebungswert (der der Umgebung entspricht, in der Sie Dusk initialisieren möchten) an das Ende Ihres .env.dusk-Dateinamens (z. B. --env.dusk.local) anhängen. Als Referenz lesen Sie die Dokumentation unter Dusk Environment Handling.

aktualisieren: Wenn Sie noch Fragen pro Ihre Kommentare haben, setzen Sie Folgendes an der Spitze Ihrer Funktion und TESTLOGIN berichten, was sie sagt dd(env('APP_ENV'));

+0

Bei Ausführung von php artisan dusk show "local" –

+0

Ändern Sie den Dateinamen der Datei env.dusk.testing in env.dusk.local – alaric

1

@alaric

ich die .env.dusk.testing geändert Datei an .env.dusk.local

Ich lief die php artisan serve und erstellt einen neuen Benutzer in der Laravel_dusk-Datenbank.

Ich lief die php artisan serve wieder und dann die php artisan dusk, um die Tests zu starten und einen neuen Benutzer mit der gleichen E-Mail, aber in der Datenbank laravel_dusk_test zu erstellen und es weiterhin Registrierung in Laravel_dusk.

0

Anstatt eine MySQL-Datenbank zu verwenden, würde ich eine temporäre SQLite-Datenbank empfehlen, da sie während der Tests erstellt und zerstört wird.

Sie eine sqilte config in Ihrem database.php haben, die bei einer tatsächlichen .sqlite-Datei verweist, die Sie in Ihrer Installation

so kopieren Sie die sqlite config in database.php und fügen Sie ihn, nennen Sie es haben sqlite_dusk vielleicht, dann für die Position der db setzen Sie es als storage_path('dusk.sqlite') oder so ähnlich. Dann erstellen Sie eine leere dusk.sqlite Datei im Stammverzeichnis Ihres Ordners storage.

Dann in Ihrem .env.dusk Satz:

DB_CONNECTION=sqlite_dusk 

Hoffnung, das hilft!

Verwandte Themen