Symfony 3.3 Service-Mocks für Funktionstests

8

Vor Symfony 3.3 war es erlaubt, einen verspotteten Service auf den Container zu setzen. Jetzt mit 3.3 wird eine Verwarnungswarnung ausgelöst, weil der Dienst bereits vordefiniert ist.

Was ist die neue Standardmethode zum Überschreiben eines vorhandenen oder vordefinierten Dienstes im Container, um einen verspotteten Dienst für einen Funktionstest einzurichten?

z. In unserem Fall setzen wir einen neuen Entity Manager mit einer neuen mocked Verbindung, die auf eine geklonte Datenbank zum Testen zeigt.

%Vor%
  

Das Festlegen des vordefinierten Dienstes "doctrine.orm.entity_manager" ist seit Symfony 3.3 veraltet und wird in Symfony 4.0 nicht mehr unterstützt.

    
Uncaught Exception 02.06.2017, 07:20
quelle

1 Antwort

0

Ich hatte vor ein paar Tagen das selbe Problem und schrieb eine Bibliothek, um Symfonys DIC auszutricksen: Ссылка

Die Idee besteht darin, den Dienst in der Datei config_test.yml mit einem "Proxy" aus der ursprünglichen Serviceklasse zu überschreiben, der alle Aufrufe an einen Schein weiterleitet, der dann im Testfall dynamisch gesetzt werden kann.

%Vor%

Dies überschreibt den im ursprünglichen Service definierten Service (xml | yml) mit einem Proxy davon.

Im Testfall können Sie dann Folgendes tun:

%Vor%

Damit wird Ihr Test gegen den Schein ausgeführt, den Sie mit der Methode setMock() angegeben haben.

Die Bibliothek ist sehr neu, weshalb einige Funktionen fehlen können. Wenn Sie es verwenden und etwas verpassen, geben Sie bitte eine Pull-Anforderung mit der gewünschten Funktion an.

    
TiMESPLiNTER 06.07.2017 12:22
quelle

Tags und Links