INTERNO
composer require --dev proklung/bitrix-phpunit-testing-tools
Un paquete que utiliza este paquete como dependencia debe tener una sección en compositor.json (el módulo de migraciones debe instalarse donde debe estar):
"extra" : {
"installer-paths" : {
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/" : [ " type:bitrix-module " ]
}
}
La clase base para las pruebas es BitrixableTestCase
. Inicia Bitrix adjunto al paquete y le permite utilizar su API en las pruebas.
Los parámetros de acceso a la base de datos se definen en el método setupDatabaseData
de la clase base BitrixableTestCase
.
Si la base de datos no existe en el momento del lanzamiento, se creará.
Por defecto:
protected function setupDatabaseData () : void
{
putenv ( ' MYSQL_HOST=localhost ' );
putenv ( ' MYSQL_DATABASE=bitrix_ci ' );
putenv ( ' MYSQL_USER=root ' );
putenv ( ' MYSQL_PASSWORD= ' );
}
Se puede anular en cada prueba específica.
Instrucciones para resetear la base de datos antes de cada prueba y cargar una nueva.
Restablezca la base de datos y cargue un volcado de base de datos personalizado.
La ruta al volcado se especifica en el método getDumpPath
de la prueba:
protected function getDumpPath () : string
{
return $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /Tests/dump/dump.sql ' ;
}
Solo es efectivo en combinación con ResetDatabaseTrait
.
Cuando se utilizan volcados de batalla, suelen surgir problemas con la caducidad de la licencia. En este caso, debe reemplazar manualmente el archivo include.php
en vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
.
Usando migraciones del módulo sprint.option.
La ruta al directorio con migraciones se especifica en el método getPathSprintMigrations
de la prueba:
protected function getPathSprintMigrations () : string
{
return __DIR__ . ' ../../../../../../Tests/sprint_migrations/ ' ;
}
Debido a las peculiaridades del uso del ensamblaje Bitrix CI, debe instalar el módulo con astucia, directamente dentro del paquete del ensamblaje (en la carpeta vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
) en la etapa de composición. . Un efecto secundario es que si el ensamblaje en sí se actualiza, el módulo de migración se irá por el desagüe.
Hasta ahora así es.
Periódicamente, la base de datos caduca debido a su fecha de caducidad (“…la versión de prueba ha caducado…”). Para solucionarlo, debe ejecutar cualquier prueba con el rasgo ResetDatabaseTrait
, que recrea la base de datos nuevamente.
Indique ejecutar migraciones antes de cada prueba.
Debajo del capó hay una versión simplificada del paquete, por lo que las migraciones desde él también son adecuadas. Con una excepción: la migración no hereda de la clase ArrilotBitrixMigrationsBaseMigrationsBitrixMigration
, sino de ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
.
La ruta al directorio con migraciones se especifica en el método getMigrationsDir
de la prueba:
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
El rasgo viene con un método auxiliar makeMigration
para crear migraciones de plantillas.
protected function makeMigration( string $ name , string $ template ) : void
Plantillas disponibles:
Nombre | Descripción | Alias |
---|---|---|
`predeterminado` | Limpiar plantilla predeterminada | |
`add_iblock_type` | Agregar un tipo de bloque de información | |
`añadir_iblock` | Agregar un bloque de información | |
`add_iblock_element_property` | Agregar una propiedad a un bloque de información | `add_iblock_prop`, `add_iblock_element_prop`, `add_element_prop`, `add_element_property` |
`añadir_uf` | Agregar propiedades UF | |
`consulta` | Solicitud arbitraria a la base de datos a través de la API d7 | |
`agregar_tabla` | Crear una tabla a través de la API d7 | `crear_tabla` |
`eliminar_tabla` | Eliminar una tabla a través de API d7 | `drop_table` |
Característica adicional: CSVTrait
para importar archivos CSV (formato de exportación Bitrix) en migraciones.
Una vez habilitada, la prueba debe implementar los siguientes métodos:
getIblockCode()
- código de bloque de información;getImportDefinitionSections()
- definición de subsecciones. Una matriz con el número de columnas del archivo CSV (IC_GROUP0, etc.);getImportDefinitionProperties()
- definición de propiedades. Matriz del formulario [código de propiedad => número de columna en CSV];getCsvPath()
- ruta al archivo CSV;¡Importante! - el archivo CSV no debe tener la primera línea con los nombres de las columnas.
Del paquete. Rediseñado para necesidades privadas.
Para ayudar a probar el código del componente, use la clase ProklBitrixTestingToolsInvokersComponentInvoker
Métodos de clase:
__constructor($componentObject)
: inicialización del objeto de inicio del componente;init()
- inicialización;setParams($params)
: establece los parámetros para iniciar el componente bajo prueba;setArParams($params)
: configura arParams para ejecutar el componente bajo prueba;setName(string $name)
- establece el nombre del componente("test.component");setTemplate($template)
: establece la plantilla del componente ("test.component");execute()
: lanza el componente para su ejecución (no se utiliza la plantilla);getResultValue($name)
: devuelve el parámetro $arResult por clave $name;getArResult()
- devuelve el $arResult completo de la operación del componente;getArResultCached()
- devuelve la parte almacenada en caché (a través de $this->__component) de $arResult después de que se haya ejecutado el componente;getExecuteResult()
: devuelve el resultado de la operación del componente cuando se utiliza el operador return
en el código del componente.Ejemplo:
// ...
/**
* @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 , " Результат не верен " );
}
Puede probar el modificador de resultados de una plantilla de componente utilizando un objeto de la clase ProklBitrixTestingToolsInvokersResultModifierInvoker
.
Métodos:
__construct($componentName, $template)
- inicialización del objeto, los parámetros son los mismos que los parámetros del método CMain::IncludeComponent()
;setArResult($arResult)
: configuración artificial del resultado que se enviará al adaptador;setArParams($params)
: configura arParams para ejecutar el componente bajo prueba;execute()
: inicia el adaptador para su ejecución;getArResult()
- devuelve el $arResult
completo de la operación del adaptador;getArResultCached()
- devuelve la parte almacenada en caché (a través de $this->__component) de $arResult después de que se haya ejecutado el componente;getArResultValue($name)
: el valor del resultado del adaptador usando la clave $name
;Ejemplo:
/**
* @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
facilita la prueba del procesamiento de eventos.
Métodos:
__construct($module, $eventName)
- inicialización del objeto desencadenante del evento, $module - nombre del módulo de emisión del evento, $eventName - nombre del evento;setExecuteParams($params)
: configura los parámetros del evento en forma de matriz, que se pasará a los parámetros del evento;execute()
- lanzamiento de evento;countOfHandlers()
: obtiene el número de controladores de eventos;getEvent()
- obtener un objeto de evento;Ejemplo:
// ...
/**
* @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 clase BitrixableTestCase
. Emula estar en una URL. Expone todo lo relacionado con la URL en el núcleo antiguo y D7.También reemplaza automáticamente todo lo que es posible desde superglobales como $_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'