Setup-Testdatenbank für Abnahmetests in Codeception (Laravel)

Ich verwende das Codeception-Framework, um Akzeptanztests in der Laravel 5-Anwendung durchzuführen. Ich wollte eine separate Datenbank zum Testen verwenden, um zu verhindern, dass sich die reale Datenbank durch das Testen ändert. Ich habe die .yml-Dateien basierend auf der Codeception-Dokumentation konfiguriert. Aber die reale Datenbank wird trotzdem betroffen. Dies sind meine Konfigurationsdateien:

/ codeception.yml

actor: Tester
 paths:
   tests: tests
    log: tests/_output
    data: tests/_data
   support: tests/_support
   envs: tests/_envs
 settings:
   bootstrap: _bootstrap.php
   colors: true
    memory_limit: 1024M
  extensions:
  enabled:
    - Codeception\Extension\RunFailed
  modules:
  config:
     Db:
        dsn: 'mysql:host=localhost;dbname=realDB'
        user: 'root'
        password: 'secret'
        dump: 'tests/_data/dump.sql'

/ tests / accept.suite.yml

class_name: AcceptanceTester
modules:
  enabled:
    - WebDriver:
        url: 'http://localhost:8000/'
        browser: firefox
    - Laravel5:
        part: ORM
        cleanup: false # can't wrap into transaction
     Db:
      populate: true
      cleanup: true
    - \Helper\Acceptance

Die realDB ist die reale Datenbank und ändert sich nach Durchführung des Abnahmetests. Ich habe verschiedene Fälle für die Bereinigung in accept.suite.yml ausprobiert: 1) Bereinigung: false im Laravel-Modul und Bereinigung: true im Db-Modul 2) Bereinigung: true im Laravel-Modul und Bereinigung: true im Db-Modul. In der Codeception-Dokumentation heißt es, dass wir für den Akzeptanztest die Bereinigung deaktivieren und das Db-Modul zum Bereinigen der Datenbank zwischen den Tests verwenden müssen. Aber die realDB ändert sich trotzdem.

Ich habe verschiedene Test-Frameworks für PHP ausprobiert, wie PHPUnit in Laravel, PHP-Selenium-Treiber, Facebook-Webtreiber und in jedem Fall die reale Datenbank, wenn ich Akzeptanztests durchführe. Wie kann ich Codeception richtig konfigurieren, um Datenbankänderungen zu verhindern?

Jede Hilfe wäre dankbar.

[UPDATE1]

Da @TheFallen vorgeschlagen hat, zum Testen eine andere Datenbank zu verwenden, ändere ich die Konfigurationsdateien folgendermaßen:

/ codeception.yml

actor: Tester
 paths:
   tests: tests
    log: tests/_output
    data: tests/_data
   support: tests/_support
   envs: tests/_envs
 settings:
   bootstrap: _bootstrap.php
   colors: true
    memory_limit: 1024M
  extensions:
  enabled:
    - Codeception\Extension\RunFailed
  modules:
  config:
     Db:
        dsn: 'mysql:host=localhost;dbname=testDB'
        user: 'root'
        password: 'secret'
        dump: 'tests/_data/dump.sql'

/ tests / accept.suite.yml

class_name: AcceptanceTester
modules:
  enabled:
    - WebDriver:
        url: 'http://localhost:8000/'
        browser: firefox
    - Laravel5:
        part: ORM
        environment_file: .env.testing
        cleanup: true
     Db:
      populate: true
      cleanup: true
    - \Helper\Acceptance 

/. env.testing

APPLICATION_URL=http://localhost:8000
APP_DEBUG=true
APP_ENV = testing
MYSQL_MAIN_HOST=localhost
MYSQL_MAIN_DATABASE=realDB
MYSQL_MAIN_USER=root
MYSQL_MAIN_PASSWORD=secret 
CACHE_DRIVER=array 
DB_CONNECTION=test_mysql
TEST_MYSQL_MAIN_DATABASE=testDB

/ config / database.php

return [

    'fetch' => PDO::FETCH_CLASS,

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

    'connections' => [

        'test_mysql' => [
            'driver'    => 'mysql',
            'host'      => env('MYSQL_MAIN_HOST', 'localhost'),
            'database'  => env('TEST_MYSQL_MAIN_DATABASE', 'testDB'),
            'username' => env('MYSQL_MAIN_USER', 'root'),
            'password' => env('MYSQL_MAIN_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
...

Die .env.testing befindet sich im Stammverzeichnis der Laravel-Anwendung. Die reale Datenbank (realDB) ist jedoch weiterhin betroffen, und nur die Speicherauszugsdatei wird in die Testdatenbank (testDB) importiert. Es sieht so aus, als würde die Anwendung .env.testing nicht verwenden. Wie kann ich das beheben?

Bitte beachten Sie, dass in meinem Abnahmetest eine AJAX-Anfrage gesendet wird, um eine Funktion aufzurufen, die Daten in der Datenbank ändert. Ich möchte Datenbanktransaktionen zurücksetzen, die von AJAX-Anforderungen ausgeführt werden.

[UPDATE2]

GemäßCodeception Dokumentation, Akzeptanztests werden in der Entwicklungsumgebung unter Verwendung eines echten Webservers ausgeführt, sodass Einstellungen von .env.testing nicht an diese übergeben werden können. :

Nach allem, was ich getan habe, um dieses Problem zu lösen, kann ich feststellen, dass es unmöglich ist, Änderungen an der realen Datenbank zu verhindern, nachdem Abnahmetests durchgeführt wurden, die AJAX-Anforderungen zur Ausführung von Datenbanktransaktionen auslösen, es sei denn, ich ändere die Standarddatenbank in eine .env-Datei zum Testen!

Wenn jemand eine bessere Lösung hat, teilen Sie diese bitte mit!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage