INTERNE
composer require --dev proklung/bitrix-phpunit-testing-tools
Un package qui utilise ce package comme dépendance doit avoir une section dans composer.json (le module de migrations doit être installé là où il doit être) :
"extra" : {
"installer-paths" : {
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/" : [ " type:bitrix-module " ]
}
}
La classe de base pour les tests est BitrixableTestCase
. Lance Bitrix attaché au package et vous permet d'utiliser son API dans les tests.
Les paramètres d'accès à la base de données sont définis dans la méthode setupDatabaseData
de la classe de base BitrixableTestCase
.
Si la base de données n'existe pas au moment du lancement, elle sera créée.
Défaut:
protected function setupDatabaseData () : void
{
putenv ( ' MYSQL_HOST=localhost ' );
putenv ( ' MYSQL_DATABASE=bitrix_ci ' );
putenv ( ' MYSQL_USER=root ' );
putenv ( ' MYSQL_PASSWORD= ' );
}
Peut être remplacé dans chaque test spécifique.
Instructions pour réinitialiser la base de données avant chaque test et en charger une nouvelle.
Réinitialisez la base de données et chargez un vidage de base de données personnalisé.
Le chemin d'accès au dump est spécifié dans la méthode getDumpPath
du test :
protected function getDumpPath () : string
{
return $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /Tests/dump/dump.sql ' ;
}
Efficace uniquement en combinaison avec ResetDatabaseTrait
.
Lors de l'utilisation de Battle Dumps, des problèmes d'expiration de licence surviennent généralement. Dans ce cas, vous devez remplacer manuellement le fichier include.php
dans vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
.
Utilisation des migrations de modules sprint.option.
Le chemin d'accès au répertoire avec les migrations est spécifié dans la méthode getPathSprintMigrations
du test :
protected function getPathSprintMigrations () : string
{
return __DIR__ . ' ../../../../../../Tests/sprint_migrations/ ' ;
}
En raison des particularités de l'utilisation de l'assembly Bitrix CI, vous devez installer le module astucieusement - directement dans le package d'assemblage (dans le dossier vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
) au stade du compositeur . Un effet secondaire est que si l’assembly lui-même est mis à jour, le module de migration tombera à l’eau.
Jusqu’ici.
Périodiquement, la base de données expire en raison de sa date d'expiration (« ... la version d'essai a expiré... »). Pour résoudre ce problème, vous devez exécuter n'importe quel test avec le trait ResetDatabaseTrait
, qui recrée à nouveau la base de données.
Demandez à exécuter des migrations avant chaque test.
Sous le capot se trouve une version allégée du package, les migrations à partir de celui-ci conviennent donc également. À une exception près : la migration n'hérite pas de la classe ArrilotBitrixMigrationsBaseMigrationsBitrixMigration
, mais de ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
.
Le chemin d'accès au répertoire avec les migrations est spécifié dans la méthode getMigrationsDir
du test :
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
Le trait est livré avec une méthode d'assistance makeMigration
pour créer des migrations de modèles.
protected function makeMigration( string $ name , string $ template ) : void
Modèles disponibles :
Nom | Description | Alias |
---|---|---|
'par défaut' | Nettoyer le modèle par défaut | |
`add_iblock_type` | Ajout d'un type d'infobloc | |
`add_iblock` | Ajout d'un bloc d'informations | |
`add_iblock_element_property` | Ajouter une propriété à un infobloc | `add_iblock_prop`, `add_iblock_element_prop`, `add_element_prop`, `add_element_property` |
`add_uf` | Ajout de propriétés UF | |
'requête' | Requête arbitraire à la base de données via l'API d7 | |
`add_table` | Créer une table via l'API d7 | `créer_table` |
`supprimer_table` | Supprimer une table via l'API d7 | `drop_table` |
Trait supplémentaire - CSVTrait
pour l'importation de fichiers CSV (format d'exportation Bitrix) dans les migrations.
Une fois activé, le test doit implémenter les méthodes suivantes :
getIblockCode()
- code du bloc d'informations ;getImportDefinitionSections()
- définition des sous-sections. Un tableau avec le nombre de colonnes dans le fichier CSV (IC_GROUP0, etc.) ;getImportDefinitionProperties()
- définition des propriétés. Tableau de la forme [code propriété => numéro de colonne en CSV] ;getCsvPath()
- chemin d'accès au fichier CSV ;Important! - le fichier CSV ne doit pas avoir de première ligne avec les noms de colonnes.
Du paquet. Repensé pour les besoins privés.
Pour vous aider à tester le code du composant, utilisez la classe ProklBitrixTestingToolsInvokersComponentInvoker
Méthodes de classe :
__constructor($componentObject)
- initialisation de l'objet de lancement du composant ;init()
- initialisation ;setParams($params)
- définit les paramètres de lancement du composant testé ;setArParams($params)
- définit arParams pour exécuter le composant testé ;setName(string $name)
- définit le nom du composant("test.component");setTemplate($template)
- définit le modèle du composant("test.component");execute()
- lance le composant pour exécution (le modèle n'est pas utilisé) ;getResultValue($name)
- renvoie le paramètre $arResult par clé $name ;getArResult()
- renvoie le $arResult complet de l'opération du composant ;getArResultCached()
- renvoie la partie mise en cache (via $this->__component) de $arResult après l'exécution du composant ;getExecuteResult()
- renvoie le résultat de l'opération du composant lorsque l'opérateur return
est utilisé dans le code du composant.Exemple:
// ...
/**
* @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 , " Результат не верен " );
}
Vous pouvez tester le result_modifier d'un modèle de composant à l'aide d'un objet de la classe ProklBitrixTestingToolsInvokersResultModifierInvoker
.
Méthodes :
__construct($componentName, $template)
- initialisation de l'objet, les paramètres sont les mêmes que les paramètres de la méthode CMain::IncludeComponent()
;setArResult($arResult)
- définition artificielle du résultat à envoyer à l'adaptateur ;setArParams($params)
- définit arParams pour exécuter le composant testé ;execute()
- lance l'adaptateur pour l'exécution ;getArResult()
- renvoie le $arResult
complet de l'opération de l'adaptateur ;getArResultCached()
- renvoie la partie mise en cache (via $this->__component) de $arResult après l'exécution du composant ;getArResultValue($name)
- la valeur du résultat de l'adaptateur utilisant la clé $name
;Exemple:
/**
* @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
facilite le test du traitement des événements.
Méthodes :
__construct($module, $eventName)
- initialisation de l'objet déclencheur d'événement, $module - nom du module d'émission d'événement, $eventName - nom de l'événement ;setExecuteParams($params)
- définition des paramètres d'événement sous la forme d'un tableau, qui sera transmis aux paramètres d'événement ;execute()
- libération de l'événement ;countOfHandlers()
- obtenir le nombre de gestionnaires d'événements ;getEvent()
- obtenir un objet événement ;Exemple:
// ...
/**
* @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
de la classe BitrixableTestCase
. Émule le fait d'être sur une URL. Expose tout ce qui concerne l'URL dans l'ancien noyau et D7.Il remplace également automatiquement tout ce qui est possible à partir de super-globaux comme $_SERVER, $_POST, etc.
$ _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'