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
Ihre anderen 'env' Einstellungen richtig arbeiten zu setzen? – apokryfos
Um meinen vorherigen Kommentar zu verdeutlichen, funktionieren Ihre anderen 'env' Einstellungen in' phpunit.xml' korrekt oder werden sie ignoriert? – apokryfos
@apokryfos ja. Es funktionierte einwandfrei in nicht-Test-Umgebung. Ich habe seine Konfiguration dem Beitrag hinzugefügt. – Aref