ภายใน
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 ในการทดสอบ
พารามิเตอร์การเข้าถึงฐานข้อมูลถูกกำหนดไว้ในเมธอด setupDatabaseData
ของคลาสฐาน BitrixableTestCase
หากไม่มีฐานข้อมูลในขณะที่เปิดตัว ฐานข้อมูลจะถูกสร้างขึ้น
ค่าเริ่มต้น:
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
เท่านั้น
เมื่อใช้ battle dumps มักจะเกิดปัญหาเรื่องการหมดอายุใบอนุญาต ในกรณีนี้ คุณต้องแทนที่ไฟล์ include.php
ใน vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
ด้วยตนเอง
การใช้การย้ายโมดูล 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` | การเพิ่มคุณสมบัติให้กับ infoblock | `add_iblock_prop`, `add_iblock_element_prop`, `add_element_prop`, `add_element_property` |
`เพิ่ม_uf` | การเพิ่มคุณสมบัติ UF | |
`สอบถาม` | คำขอไปยังฐานข้อมูลโดยพลการผ่าน d7 API | |
`เพิ่ม_ตาราง` | การสร้างตารางผ่าน d7 API | `create_table` |
`ลบ_ตาราง` | การลบตารางผ่าน API d7 | `drop_table` |
ลักษณะเพิ่มเติม - CSVTrait
สำหรับการนำเข้าไฟล์ CSV (รูปแบบการส่งออก Bitrix) ในการย้ายข้อมูล
เมื่อเปิดใช้งานแล้ว การทดสอบจะต้องใช้วิธีการต่อไปนี้:
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)
- ส่งคืนพารามิเตอร์ $arResult ด้วยคีย์ $name;getArResult()
- ส่งคืน $arResult ที่สมบูรณ์ของการดำเนินการของส่วนประกอบgetArResultCached()
- ส่งคืนส่วนที่แคชไว้ (ผ่าน $this->__component) ของ $arResult หลังจากที่คอมโพเนนต์ทำงาน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 , " Результат не верен " );
}
คุณสามารถทดสอบ result_modifier ของเทมเพลตส่วนประกอบได้โดยใช้อ็อบเจ็กต์ของคลาส ProklBitrixTestingToolsInvokersResultModifierInvoker
วิธีการ:
__construct($componentName, $template)
- การเริ่มต้นวัตถุ พารามิเตอร์เหมือนกับพารามิเตอร์ของเมธอด CMain::IncludeComponent()
setArResult($arResult)
- ตั้งค่าผลลัพธ์ที่จะส่งไปยังอะแดปเตอร์โดยไม่ตั้งใจsetArParams($params)
- ตั้งค่า arParams เพื่อรันส่วนประกอบภายใต้การทดสอบexecute()
- เรียกใช้อะแดปเตอร์เพื่อดำเนินการgetArResult()
- ส่งคืน $arResult
ทั้งหมดของการทำงานของอแด็ปเตอร์getArResultCached()
- ส่งคืนส่วนที่แคชไว้ (ผ่าน $this->__component) ของ $arResult หลังจากที่คอมโพเนนต์ทำงานแล้ว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 );
}
goTo
ของคลาส BitrixableTestCase
จำลองการอยู่บน URL เปิดเผยทุกอย่างที่เกี่ยวข้องกับ URL ในคอร์เก่าและ D7นอกจากนี้ยังแทนที่ทุกสิ่งที่เป็นไปได้จาก super-globals เช่น $_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'