내부
composer require --dev proklung/bitrix-phpunit-testing-tools
이 패키지를 종속성으로 사용하는 패키지는 작곡가.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
특성을 사용하여 테스트를 실행해야 합니다.
각 테스트 전에 마이그레이션을 실행하도록 지시합니다.
내부에는 패키지의 간단한 버전이 있으므로 이 버전에서의 마이그레이션도 적합합니다. 한 가지 예외가 있습니다. 마이그레이션은 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` |
`추가_uf` | University of Florida의 속성 추가 | |
'쿼리' | d7 API를 통한 데이터베이스에 대한 임의 요청 | |
`추가_테이블` | d7 API를 통해 테이블 만들기 | `create_table` |
`delete_table` | 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.comComponent");setTemplate($template)
- 구성 요소 템플릿("test.comComponent")을 설정합니다.execute()
- 실행할 구성 요소를 시작합니다(템플릿은 사용되지 않음).getResultValue($name)
- $name 키로 $arResult 매개변수를 반환합니다.getArResult()
- 구성 요소 작업의 전체 $arResult를 반환합니다.getArResultCached()
- 구성 요소가 실행된 후 $arResult의 캐시된 부분($this->__comComponent를 통해)을 반환합니다.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->__comComponent를 통해)을 반환합니다.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'