2016-07-13 6 views
0

Ich möchte eine separate sqlite-Testdatenbank für Akzeptanztests von PHPunit zusammen mit Facebook Webtreiber in Laravel 5.1 verwenden. Ich habe die Standarddatenbank in phpunit.xml geändert. Nach Durchführung der Tests werden die Transaktionen in der MySQL-Datenbank durchgeführt! Weil Testdaten in MySql gespeichert werden. (In entsprechenden Funktionen wird die Modellsicherungsmethode verwendet, um eine Instanz eines Modells in der Datenbank zu speichern).Eloquente Modelle verwenden keine Standard-Datenbankverbindung in Testumgebung (Laravel)

Die folgenden Einstellungen und Einstellungen beziehen sich auf die Testdatenbank.

/config/database.php

'default' => env('DB_CONNECTION', 'mysql'), 
'connections' => [ 
    'testing' => [ 
    'driver' => 'sqlite', 
    'database' => ':memory:', 
    'prefix' => '', 
], 

'mysql' => [ 
    'driver' => 'mysql', 
    'host'  => env('MYSQL_MAIN_HOST', 'localhost'), 
    'database' => env('MYSQL_MAIN_DATABASE', 'db'), 
    'username' => env('MYSQL_MAIN_USER', 'root'), 
    'password' => env('MYSQL_MAIN_PASSWORD', 'secret'), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
] 

/phpunit.xml

<phpunit backupGlobals="false" 
    backupStaticAttributes="false" 
    bootstrap="bootstrap/autoload.php" 
    colors="true" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    processIsolation="false" 
    stopOnFailure="false" 
    syntaxCheck="false"> 
    <testsuites> 
    <testsuite name="Application Test Suite"> 
     <directory>./tests/</directory> 
    </testsuite> 
    </testsuites> 
    <filter> 
    <whitelist> 
     <directory suffix=".php">app/</directory> 
    </whitelist> 
    </filter> 
    <php> 
    <env name="APP_ENV" value="testing"/> 
    <env name="DB_CONNECTION" value="testing"/> 
    <env name="CACHE_DRIVER" value="array"/> 
    <env name="SESSION_DRIVER" value="array"/> 
    <env name="QUEUE_DRIVER" value="sync"/> 
    <server name='HTTP_HOST' value='http://localhost:8000' /> 
    <server name='REQUEST_URI' value='http://localhost:8000' /> 
    </php> 
</phpunit> 

.../Tests/TestCase.php

use Illuminate\Support\Facades\Config; 
use Illuminate\Support\Facades\Artisan; 

class TestCase extends Illuminate\Foundation\Testing\TestCase 
{ 
    use \Illuminate\Foundation\Testing\DatabaseMigrations; 

    public function setUp() 
    { 
     parent::setUp(); 
     Artisan::call('migrate'); 
     Artisan::call('db:seed'); 
    } 

    public function tearDown() 
    { 
     Artisan::call('migrate:rollback'); 
     parent::tearDown(); // TODO: Change the autogenerated stub 
    } 
} 

/.env

APPLICATION_URL=http://localhost:8000 
APP_DEBUG=true 
APP_ENV = local 
CACHE_DRIVER=array 
DB_CONNECTION=mysql 

Ich habe viel gesucht, aber noch keinen Erfolg. Warum werden Transaktionen in In-Memory-Sqlite in der MySql-Datenbank angewendet? Wie kann ich facebook web driver dazu bringen, phpunit.xml zu benutzen? die Dokumentation

+0

Ihre anderen 'env' Einstellungen richtig arbeiten zu setzen? – apokryfos

+0

Um meinen vorherigen Kommentar zu verdeutlichen, funktionieren Ihre anderen 'env' Einstellungen in' phpunit.xml' korrekt oder werden sie ignoriert? – apokryfos

+0

@apokryfos ja. Es funktionierte einwandfrei in nicht-Test-Umgebung. Ich habe seine Konfiguration dem Beitrag hinzugefügt. – Aref

Antwort

0

versuchen, diese 'database'=>'/absolute/path/to/database.sqlite'

Lesen https://laravel.com/docs/5.2/database

+0

Danke für Ihren Vorschlag, aber es war nicht der Grund für mein Problem. Es scheint, dass Akzeptanztests innerhalb eines Webservers funktionieren, so dass Testdaten nicht durch Zurückrollen der Transaktion bereinigt werden können. Ich habe das Facebook-Webdriver-Framework aufgegeben und Codeception ausprobiert, habe aber das gleiche Problem bei der Codecption. Wenn Sie mit Codeception gearbeitet haben, werfen Sie bitte einen Blick auf die folgende Frage und helfen Sie mir. http: // Stapelüberlauf.com/questions/38411641/setup-test-datenbank-für-abnahme-tests-in-codeception-laravel. Danke im Voraus. – Aref