2017-02-24 3 views
0

Ich muss einige Berichte testen, es gibt eine komplexe Datenstruktur und viele Daten betreffen diese Berichte, so dass das Erstellen von Fixtures für diesen Zweck sehr mühsam wäre. Ich möchte eine vorhandene Datenbank (tatsächlich Kopie davon) verwenden, um Berichte zu testen.CakePHP 3 Test: Wie Datensätze aus der Datenbank geladen werden?

Wie kann ich dies in CakePHP 3 Tests erreichen? Ist es möglich, Datensätze für Fixtures (keine Struktur der Tabelle) aus der Datenbank in CakePHP 3 zu laden?

Antwort

2

Sie können Leuchten aus vorhandenen Datensätzen in Tabellen erstellen Sie mit dem Bake Dienstprogramm:

--records, -r  Generate a fixture with records from the non-test 
        database. Used with --count and --conditions to limit 
        which records are added to the fixture. 
--count, -n  When using generated data, the number of records to 
        include in the fixture(s). (default: 
        1) 

Zum Beispiel:

cake bake fixture you_table_name -r -c 100

+0

Danke, aber gibt es eine Lösung, die Datenbank direkt ohne Fixtures zu verwenden? Ich habe eine "echte" Datenbank entsorgt und zu diesem Zweck eine separate Datenbank erstellt (Testberichte), aber es gibt eine Menge Datensätze (Tausende), daher denke ich, dass das Generieren von Fixtures aus diesen Datensätzen keine gute Idee ist. – Teimuraz

0

Da PHPUnit alles aus der Datenbank löscht, die Es hat Zugriff auf jeden Test, Sie möchten ihm wahrscheinlich keinen Zugriff auf Ihre Produktionsdatenbank geben.

Die Lösung, die Sie suchen, ist wahrscheinlich schreiben die init() Funktion jedes Fixtures, um seine $records Eigenschaft aus Daten zu erstellen, die es aus der Produktionsdatenbank zieht.

Gefällt Ihnen dieses (unbestätigte):

public function init() 
{ 
    $thingsTable = TableRegistry::get('Things'); 
    $this->records = $thingsTable->find()->toArray(); 
    parent::init(); 
} 

Hinweis, dass dies wirklich Ihre Tests verlangsamen, obwohl die Ergebnisse zwischenspeichern, dass mildern wird.

Verwandte Themen