内部
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 アセンブリの使用の特殊性により、コンポーザー段階でモジュールを巧妙にアセンブリ パッケージ内 ( vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
フォルダー内) に直接インストールする必要があります。 。副作用として、アセンブリ自体が更新されると、移行モジュールが無駄になってしまいます。
ここまではそうだ。
データベースは有効期限により定期的に期限切れになります (「... 試用版の有効期限が切れました...」)。これを修正するには、データベースを再度再作成するResetDatabaseTrait
特性を使用してテストを実行する必要があります。
各テストの前に移行を実行するように指示します。
内部にはパッケージの必要最低限のバージョンが含まれているため、そこからの移行も適しています。 1 つの例外を除いて、移行はArrilotBitrixMigrationsBaseMigrationsBitrixMigration
クラスから継承せず、 ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
から継承します。
移行のあるディレクトリへのパスは、テストのgetMigrationsDir
メソッドで指定されます。
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
このトレイトには、テンプレートの移行を作成するためのmakeMigration
ヘルパー メソッドが付属しています。
protected function makeMigration( string $ name , string $ template ) : void
利用可能なテンプレート:
名前 | 説明 | 別名 |
---|---|---|
「デフォルト」 | クリーンなデフォルトテンプレート | |
`add_iblock_type` | 情報ブロックタイプの追加 | |
`add_iblock` | 情報ブロックの追加 | |
`add_iblock_element_property` | 情報ブロックへのプロパティの追加 | `add_iblock_prop`、`add_iblock_element_prop`、`add_element_prop`、`add_element_property` |
`add_uf` | UF プロパティの追加 | |
「クエリ」 | d7 APIを介したデータベースへの任意のリクエスト | |
`add_table` | d7 API を使用したテーブルの作成 | `create_table` |
`テーブルの削除` | API d7 を介したテーブルの削除 | `ドロップテーブル` |
追加の特性 - 移行で 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'