內部的
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'