INTERN
composer require --dev proklung/bitrix-phpunit-testing-tools
Ein Paket, das dieses Paket als Abhängigkeit verwendet, muss einen Abschnitt in Composer.json haben (das Migrationsmodul muss dort installiert werden, wo es sein muss):
"extra" : {
"installer-paths" : {
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/" : [ " type:bitrix-module " ]
}
}
Die Basisklasse für Tests ist BitrixableTestCase
. Startet Bitrix, das dem Paket beigefügt ist, und ermöglicht Ihnen die Verwendung seiner API in Tests.
Datenbankzugriffsparameter werden in der Methode setupDatabaseData
der Basisklasse BitrixableTestCase
definiert.
Wenn die Datenbank zum Zeitpunkt des Starts noch nicht vorhanden ist, wird sie erstellt.
Standard:
protected function setupDatabaseData () : void
{
putenv ( ' MYSQL_HOST=localhost ' );
putenv ( ' MYSQL_DATABASE=bitrix_ci ' );
putenv ( ' MYSQL_USER=root ' );
putenv ( ' MYSQL_PASSWORD= ' );
}
Kann in jedem spezifischen Test überschrieben werden.
Anweisungen zum Zurücksetzen der Datenbank vor jedem Test und zum Laden einer neuen.
Setzen Sie die Datenbank zurück und laden Sie einen benutzerdefinierten Datenbank-Dump.
Der Pfad zum Dump wird in der getDumpPath
-Methode des Tests angegeben:
protected function getDumpPath () : string
{
return $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /Tests/dump/dump.sql ' ;
}
Nur wirksam in Kombination mit ResetDatabaseTrait
.
Bei der Verwendung von Battle Dumps kommt es in der Regel zu Problemen mit dem Ablauf der Lizenz. In diesem Fall müssen Sie die Datei include.php
in vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
manuell ersetzen.
Verwendung von sprint.option-Modulmigrationen.
Der Pfad zum Verzeichnis mit Migrationen wird in der getPathSprintMigrations
-Methode des Tests angegeben:
protected function getPathSprintMigrations () : string
{
return __DIR__ . ' ../../../../../../Tests/sprint_migrations/ ' ;
}
Aufgrund der Besonderheiten bei der Verwendung der Bitrix CI-Assembly müssen Sie das Modul geschickt installieren – direkt im Assembly-Paket (im Ordner vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
) auf der Composer-Stufe . Ein Nebeneffekt besteht darin, dass bei einer Aktualisierung der Assembly selbst das Migrationsmodul den Bach runter geht.
So weit.
In regelmäßigen Abständen läuft die Datenbank aufgrund ihres Ablaufdatums ab („... die Testversion ist abgelaufen ...“). Um das Problem zu beheben, müssen Sie einen beliebigen Test mit der Eigenschaft ResetDatabaseTrait
ausführen, wodurch die Datenbank erneut erstellt wird.
Weisen Sie an, vor jedem Test Migrationen durchzuführen.
Unter der Haube verbirgt sich eine abgespeckte Version des Pakets, daher sind auch Migrationen davon geeignet. Mit einer Ausnahme erbt die Migration nicht von der Klasse ArrilotBitrixMigrationsBaseMigrationsBitrixMigration
, sondern von ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
.
Der Pfad zum Verzeichnis mit Migrationen wird in der Methode getMigrationsDir
des Tests angegeben:
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
Das Merkmal enthält eine makeMigration
Hilfsmethode zum Erstellen von Vorlagenmigrationen.
protected function makeMigration( string $ name , string $ template ) : void
Verfügbare Vorlagen:
Name | Beschreibung | Aliase |
---|---|---|
„Standard“. | Bereinigen Sie die Standardvorlage | |
`add_iblock_type` | Hinzufügen eines Infoblocktyps | |
`add_iblock` | Hinzufügen eines Informationsblocks | |
`add_iblock_element_property` | Hinzufügen einer Eigenschaft zu einem Infoblock | „add_iblock_prop“, „add_iblock_element_prop“, „add_element_prop“, „add_element_property“. |
`add_uf` | Hinzufügen von UF-Eigenschaften | |
„Abfrage“. | Beliebige Anfrage an die Datenbank über die d7-API | |
`add_table` | Erstellen einer Tabelle über die d7-API | `create_table` |
`delete_table` | Löschen einer Tabelle über API d7 | `drop_table` |
Zusätzliches Merkmal – CSVTrait
zum Importieren von CSV-Dateien (Bitrix-Exportformat) in Migrationen.
Nach der Aktivierung muss der Test die folgenden Methoden implementieren:
getIblockCode()
– Infoblock-Code;getImportDefinitionSections()
– Definition von Unterabschnitten. Ein Array mit der Anzahl der Spalten in der CSV-Datei (IC_GROUP0 usw.);getImportDefinitionProperties()
– Definition von Eigenschaften. Array der Form [Eigenschaftscode => Spaltennummer in CSV];getCsvPath()
– Pfad zur CSV-Datei;Wichtig! - Die CSV-Datei sollte nicht die erste Zeile mit Spaltennamen enthalten.
Aus dem Paket. Neu gestaltet für private Bedürfnisse.
Um den Komponentencode zu testen, verwenden Sie die Klasse ProklBitrixTestingToolsInvokersComponentInvoker
Klassenmethoden:
__constructor($componentObject)
– Initialisierung des Komponentenstartobjekts;init()
– Initialisierung;setParams($params)
– legt Parameter zum Starten der zu testenden Komponente fest;setArParams($params)
– legt arParams fest, um die zu testende Komponente auszuführen;setName(string $name)
– legt den Namen der Komponente fest („test.component“);setTemplate($template)
– setzt die Komponentenvorlage("test.component");execute()
– startet die Komponente zur Ausführung (die Vorlage wird nicht verwendet);getResultValue($name)
– gibt den Parameter $arResult nach Schlüssel $name zurück;getArResult()
– gibt das vollständige $arResult der Operation der Komponente zurück;getArResultCached()
– gibt den zwischengespeicherten Teil (über $this->__component) von $arResult zurück, nachdem die Komponente ausgeführt wurde;getExecuteResult()
– gibt das Ergebnis der Komponentenoperation zurück, wenn der return
im Komponentencode verwendet wird.Beispiel:
// ...
/**
* @label component
* @test
*/
public function useComponentInvoker () {
/** @var CBitrixComponent $componentObject */
$ component = new Prokl BitrixTestingTools Invokers ComponentInvoker ( $ componentObject );
$ component -> init ();
$ component -> setParams ( array ( " id " => 10 ));
$ component -> execute ();
$ this -> getAssert ()-> equal ( $ component -> getResultValue ( " id " ), 10 , " Результат не верен " );
}
Sie können den result_modifier einer Komponentenvorlage mithilfe eines Objekts der Klasse ProklBitrixTestingToolsInvokersResultModifierInvoker
testen.
Methoden:
__construct($componentName, $template)
– Objektinitialisierung, Parameter sind die gleichen wie die Parameter der CMain::IncludeComponent()
Methode;setArResult($arResult)
– künstliches Festlegen des Ergebnisses, das an den Adapter gesendet werden soll;setArParams($params)
– legt arParams fest, um die zu testende Komponente auszuführen;execute()
– Adapter zur Ausführung starten;getArResult()
– gibt das vollständige $arResult
der Adapteroperation zurück;getArResultCached()
– gibt den zwischengespeicherten Teil (über $this->__component) von $arResult zurück, nachdem die Komponente ausgeführt wurde;getArResultValue($name)
– der Wert des Ergebnisses des Adapters, der den Schlüssel $name
verwendet;Beispiel:
/**
* @label component
* @test
*/
public function modifierForSomeTemplate () {
$ rm = new Prokl BitrixTestingTools Invokers ResultModifierInvoker ( " project:test.with.class " , " list " );
$ rm -> setArResult ( array ( " id " => 10 ));
$ rm -> execute ();
$ this -> getAssert ()-> equal ( $ rm -> getArResultValue ( " id " ), 10 , " Параметры не равны " );
}
ProklBitrixTestingToolsInvokersEventInvoker
erleichtert das Testen der Ereignisverarbeitung.
Methoden:
__construct($module, $eventName)
– Initialisierung des Ereignisauslöserobjekts, $module – Name des Ereignisemissionsmoduls, $eventName – Ereignisname;setExecuteParams($params)
– Festlegen der Ereignisparameter in Form eines Arrays, das an die Ereignisparameter übergeben wird;execute()
– Ereignisfreigabe;countOfHandlers()
– Anzahl der Event-Handler ermitteln;getEvent()
– ein Ereignisobjekt abrufen;Beispiel:
// ...
/**
* @test
*/
public function handlersOfEventExist () {
$ eventInvoker = new Prokl BitrixTestingTools Invokers EventInvoker ( " main " , " OnPageStart " );
$ eventInvoker -> setExecuteParams ( array (
" IBLOCK_ID " => 12
));
$ eventInvoker -> execute ();
$ this -> getAssert ()-> asTrue ( $ eventInvoker -> countOfHandlers () > 1 );
}
goTo
Methode der BitrixableTestCase
-Klasse. Emuliert die Anwesenheit auf einer URL. Stellt alles offen, was mit der URL im alten Core und D7 zu tun hat.Es ersetzt auch automatisch alles, was von Superglobals wie $_SERVER, $_POST usw. möglich ist.
$ _GET [ ' test ' ] = ' OK ' ;
$ this -> goTo ( ' /test/ ' );
$ url = $ APPLICATION -> GetCurPage (); // $url = '/test/index.php'
$ request = Application:: getInstance ()-> getContext ()-> getRequest ();
$ uriString = $ request -> getRequestUri (); // $uriString = '/test/'
$ testGetParam = $ request -> getQuery ( ' test ' ); // $testGetParam = 'OK'