Bisher habe ich für meine Magento 2-Testanforderungen PHP Unit als (mehr oder weniger) Abnahmetester verwendet. Dabei wurden die Ergebnisse von Server- und HTML-Anforderungen getestet, die auf einem System mit installierten Modulen ausgeführt wurden. Ich möchte meine eigenen Integrationstests erstellen können. Ermöglichen die mit Magento 2 gelieferten Testtools Entwicklern von Drittanbietern, ihre eigenen Integrationstests zu erstellen, die den Test-Framework-Code von Magento nutzen? Oder werden wir alle unseren eigenen Bootstrap rollen?
Das ist
- Ich bin ein Magento-Entwickler
- Ich möchte einen Integrationstest erstellen
- Ich würde meinen Integrationstest durchführen, um eine vollständig bootfähige Magento-Umgebung zum Spielen zu haben (dh Objektmanager und / oder Abhängigkeitsinjektion zur Verwendung).
- Ich möchte, dass mein Integrationstest den Test erweitert
Magento\TestFramework\TestCase\AbstractController
, damit ich die gleichen Helfer wie Magento-Tests habe - Ich möchte in der Lage sein, meine Tests isoliert vom Rest der Testsuite auszuführen (dh ich muss nicht 2 Stunden warten, um meine 15 Sekunden langen Tests auszuführen)
- Ich möchte, dass meine Tests getrennt von Magentos Tests gespeichert werden
Die dev docs-Site enthält einige Einstiegsartikel zum Testen, aber sie scheinen darauf ausgerichtet zu sein, die mit Magento gelieferten Tests auszuführen und keine eigenen Tests zu erstellen und auszuführen. Es gibt die alten Beispielmodule , aber alle erweitern die PHPUnit_Framework_TestCase
Klasse und scheinen Unit-Tests zu sein (dh Code zu testen, der nicht auf dem Magento-Framework basiert).
Gibt es eine von Magento bereitgestellte Möglichkeit, dies zu tun?
Wenn nicht, hat jemand sein eigenes Setup so gerollt, dass der Test der Magento-Entwicklergemeinde es als Standard übernehmen könnte?
quelle
__DIR__
sollte ein Schrägstrich (/_files
) folgen . Zweitens wird das Gerät aus dem TestFramework geladen, so dass es__DIR__
auf das TestFramework-Verzeichnis und nicht auf Ihr eigenes Modul verweist. DieComponentRegistrar
können dafür verwendet werden:require $ObjectManager::getInstance()->get(ComponentRegistrar::class)->getPath('module', 'Foo_Bar').'/Test/Integration/_files/example.php';
Ich habe ein bisschen mit den Integrationstests gespielt, und das habe ich bisher gefunden.
Grundsätzlich habe ich ähnliche Schritte wie Fooman ausgeführt, mit einigen Unterschieden, damit der Integrationstest Teil meines Moduls wird.
Dies sind die Schritte, denen ich gefolgt bin:
1- Platzieren Sie Ihre Integrationstests unter
app/code/Vendor/CustomModule/Test/Integration
2- Kopieren
dev/tests/integration/phpunit.dist.xml
nachdev/tests/integration/phpunit.xml
und ersetzen
mit
3- Dann starte ich es mit dem CLI-Tool
bin/magento dev:test:run integration
Sie sollten berücksichtigen, was Fooman über "TESTS_CLEANUP" sagt und wie lange es dauert, die Integrationstests einzurichten, wenn Sie die Bereinigung aktiviert haben.
Hier füge ich ein Funktionsbeispiel als weitere Referenz hinzu. Sie werden sehen, wie Sie auf den Objektmanager zugreifen und eine Instanz von Magento-Klassen generieren sowie Magento-Fixtures verwenden können.
app / code / Vendor / CustomModule / Controller / Bestellung / Info.php
app / code / Vendor / CustomModule / etc / frontend / routes.xml
app / code / Vendor / CustomModule / etc / module.xml
app / code / Vendor / CustomModule / Test / Integration / Controller / Bestellung / InfoTest.php
app / code / Vendor / CustomModule / registration.php
quelle