内部的
composer require --dev proklung/bitrix-phpunit-testing-tools
使用此包作为依赖项的包必须在composer.json中有一个部分(迁移模块需要安装在需要的地方):
"extra" : {
"installer-paths" : {
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/" : [ " type:bitrix-module " ]
}
}
测试的基类是BitrixableTestCase
。启动附加到包的 Bitrix 并允许您在测试中使用其 API。
数据库访问参数在BitrixableTestCase
基类的setupDatabaseData
方法中定义。
如果启动时数据库不存在,则会创建该数据库。
默认:
protected function setupDatabaseData () : void
{
putenv ( ' MYSQL_HOST=localhost ' );
putenv ( ' MYSQL_DATABASE=bitrix_ci ' );
putenv ( ' MYSQL_USER=root ' );
putenv ( ' MYSQL_PASSWORD= ' );
}
可以在每个特定测试中被覆盖。
每次测试前重置数据库并加载新数据库的说明。
重置数据库并加载自定义数据库转储。
转储的路径在测试的getDumpPath
方法中指定:
protected function getDumpPath () : string
{
return $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /Tests/dump/dump.sql ' ;
}
仅与ResetDatabaseTrait
结合使用有效。
使用战斗转储时,通常会出现许可证过期的问题。在这种情况下,您必须手动替换vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
中的include.php
文件。
使用 sprint.option 模块迁移。
包含迁移的目录的路径在测试的getPathSprintMigrations
方法中指定:
protected function getPathSprintMigrations () : string
{
return __DIR__ . ' ../../../../../../Tests/sprint_migrations/ ' ;
}
由于使用 Bitrix CI 程序集的特殊性,您必须巧妙地安装模块 - 在 Composer 阶段直接在程序集包内(在vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
文件夹中) 。副作用是,如果程序集本身被更新,迁移模块将付之东流。
到目前为止。
数据库会定期因过期日期而过期(“...试用版已过期...”)。要修复此问题,您需要使用ResetDatabaseTrait
特征运行任何测试,这会再次重新创建数据库。
指示在每次测试之前运行迁移。
引擎盖下是该软件包的精简版本,因此从它进行迁移也是合适的。但有一个例外 - 迁移不是从ArrilotBitrixMigrationsBaseMigrationsBitrixMigration
类继承,而是从ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
继承。
包含迁移的目录的路径在测试的getMigrationsDir
方法中指定:
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
该特征附带了一个makeMigration
辅助方法,用于创建模板迁移。
protected function makeMigration( string $ name , string $ template ) : void
可用模板:
姓名 | 描述 | 别名 |
---|---|---|
`默认` | 清理默认模板 | |
`add_iblock_type` | 添加信息块类型 | |
`添加_iblock` | 添加信息块 | |
`add_iblock_element_property` | 将属性添加到信息块 | `add_iblock_prop`、`add_iblock_element_prop`、`add_element_prop`、`add_element_property` |
`add_uf` | 添加超滤性能 | |
`查询` | 通过d7 API向数据库任意请求 | |
`添加表` | 通过 d7 API 创建表 | `创建表` |
`删除表` | 通过 API d7 删除表 | `drop_table` |
附加特征 - 用于在迁移中导入 CSV 文件(Bitrix 导出格式) CSVTrait
。
一旦启用,测试必须实现以下方法:
getIblockCode()
- 信息块代码;getImportDefinitionSections()
- 小节的定义。包含 CSV 文件中列数的数组(IC_GROUP0 等);getImportDefinitionProperties()
- 属性的定义。形式为 [属性代码 => CSV 中的列号] 的数组;getCsvPath()
- CSV 文件的路径;重要的! - CSV 文件的第一行不应包含列名称。
从包装中。为满足私人需求而重新设计。
要帮助测试组件代码,请使用ProklBitrixTestingToolsInvokersComponentInvoker
类
类方法:
__constructor($componentObject)
- 组件启动对象的初始化;init()
——初始化;setParams($params)
- 设置用于启动被测组件的参数;setArParams($params)
- 设置 arParams 以运行被测试的组件;setName(string $name)
- 设置组件的名称(“test.component”);setTemplate($template)
- 设置组件模板("test.component");execute()
- 启动组件以执行(不使用模板);getResultValue($name)
- 通过键 $name 返回 $arResult 参数;getArResult()
- 返回组件操作的完整 $arResult;getArResultCached()
- 在组件运行后返回 $arResult 的缓存部分(通过 $this->__component);getExecuteResult()
- 当在组件代码中使用return
运算符时,返回组件操作的结果。例子:
// ...
/**
* @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 , " Результат не верен " );
}
您可以使用ProklBitrixTestingToolsInvokersResultModifierInvoker
类的对象来测试组件模板的 result_modifier。
方法:
__construct($componentName, $template)
- 对象初始化,参数与CMain::IncludeComponent()
方法的参数相同;setArResult($arResult)
- 人为设置要发送到适配器的结果;setArParams($params)
- 设置 arParams 以运行被测试的组件;execute()
- 启动适配器以执行;getArResult()
- 返回适配器操作的完整$arResult
;getArResultCached()
- 在组件运行后返回 $arResult 的缓存部分(通过 $this->__component);getArResultValue($name)
- 使用$name
键的适配器的结果值;例子:
/**
* @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
类可以更轻松地测试事件处理。
方法:
__construct($module, $eventName)
- 事件触发对象的初始化,$module - 事件发射模块的名称,$eventName - 事件名称;setExecuteParams($params)
- 以数组的形式设置事件参数,该参数将传递给事件参数;execute()
——事件释放;countOfHandlers()
- 获取事件处理程序的数量;getEvent()
- 获取事件对象;例子:
// ...
/**
* @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 );
}
BitrixableTestCase
类的goTo
方法。模拟位于 URL 上。公开旧核心和 D7 中与 URL 相关的所有内容。它还会自动替换超级全局变量(如 $_SERVER、$_POST 等)中可能存在的所有内容。
$ _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'