ไลบรารี่ที่ให้คุณใช้ไลบรารี PHP-VCR ในการทดสอบ PHPUnit ของคุณได้อย่างง่ายดาย
composer require --dev angelov/phpunit-php-vcr
จากนั้นเพิ่มส่วนขยายลงในไฟล์กำหนดค่า PHPUnit ของคุณ
(พารามิเตอร์ทั้งหมดเป็นทางเลือก)
< extensions >
< bootstrap class = " AngelovPHPUnitPHPVcrExtension " >
< parameter name = " cassettesPath " value = " tests/fixtures " />
< parameter name = " storage " value = " yaml " /> <!-- https://php-vcr.github.io/documentation/configuration/#storage -->
< parameter name = " libraryHooks " value = " stream_wrapper, curl, soap " /> <!-- https://php-vcr.github.io/documentation/configuration/#library-hooks -->
< parameter name = " requestMatchers " value = " method, url, query_string, ... " /> <!-- https://php-vcr.github.io/documentation/configuration/#request-matching -->
< parameter name = " whitelistedPaths " value = " " /> <!-- https://php-vcr.github.io/documentation/configuration/#white--and-blacklisting-paths -->
< parameter name = " blacklistedPaths " value = " " /> <!-- https://php-vcr.github.io/documentation/configuration/#white--and-blacklisting-paths -->
< parameter name = " mode " value = " new_episodes " /> <!-- https://php-vcr.github.io/documentation/configuration/#record-modes -->
</ bootstrap >
</ extensions >
ไลบรารีมีแอตทริบิวต์ UseCassette
ที่สามารถประกาศในคลาสทดสอบหรือวิธีทดสอบเฉพาะได้ แอ็ตทริบิวต์ต้องการอาร์กิวเมนต์สตริงหนึ่งรายการ - ชื่อของคาสเซ็ต
เมื่อดำเนินการทดสอบ ห้องสมุดจะเปิดและปิดเครื่องบันทึกโดยอัตโนมัติ และใส่เทปคาสเซ็ตเมื่อจำเป็น
ตัวอย่าง:
เมื่อประกาศในคลาส PHP-VCR จะดักฟังคำขอในวิธีทดสอบทั้งหมดในคลาสนั้น และจะเก็บคำตอบไว้ในคาสเซ็ตที่กำหนด
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
#[UseCassette( " example_cassette.yml " )]
class ExampleTest extends TestCase
{
#[Test]
public function example (): void { . . . }
#[Test]
public function another (): void { . . . }
}
เมื่อประกาศวิธีทดสอบ เฉพาะคำขอในวิธีนั้นเท่านั้นที่จะถูกสกัดกั้นและจัดเก็บไว้ในคาสเซ็ตที่กำหนด โปรดทราบว่าสามารถประกาศได้ด้วยวิธีการทดสอบหลายวิธีโดยใช้คาสเซ็ตที่แตกต่างกัน
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
class ExampleTest extends TestCase
{
#[Test]
#[UseCassette( " example.yml " )]
public function example (): void { . . . }
#[Test]
public function another (): void { . . . }
#[Test]
#[UseCassette( " example_2.yml " )]
public function recorded (): void { . . . }
}
เมื่อประกาศทั้งในคลาสและในวิธีการเฉพาะ ชื่อจากแอตทริบิวต์ที่ประกาศในวิธีการนั้นจะถูกใช้สำหรับวิธีการนั้น ในตัวอย่างนี้ การตอบสนองจากคำขอที่ทำในเมธอด example()
จะถูกจัดเก็บไว้ใน example.yml
และการตอบสนองจากคำขอ recorded()
ใน example_2.yml
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
#[UseCassette( " example.yml " )]
class ExampleTest extends TestCase
{
#[Test]
public function example (): void { . . . }
#[Test]
#[UseCassette( " example_2.yml " )]
public function recorded (): void { . . . }
}