ไลบรารีที่ให้ชุดการยืนยันที่สะดวกสำหรับการทดสอบสัญญา ReactPHP ภายใต้ประทุนใช้ เบาะแส/php-block-react เพื่อบล็อกสัญญา
เมื่อทดสอบโค้ดแบบอะซิงโครนัสและสัญญาว่าสิ่งต่างๆ อาจยุ่งยากเล็กน้อย ไลบรารีนี้จัดเตรียมชุดการยืนยันที่สะดวกสำหรับการทดสอบสัญญา ReactPHP
สารบัญ
การติดตั้ง
เริ่มต้นอย่างรวดเร็ว
การยืนยัน
ยืนยันสัญญาปฏิบัติตาม ()
ยืนยันสัญญาปฏิบัติตาม ()
assertPromiseFulfillsWithInstanceOf()
assertPromiseRejects()
assertPromiseRejectsWith()
ยืนยันTrueAboutPromise ()
assertFalseAboutPromise()
ผู้ช่วยเหลือ
รอเพื่อสัญญาว่าจะปฏิบัติตาม()
รอเพื่อสัญญา()
ห้องสมุดต้องการ PHP 8.0 ขึ้นไป
วิธีที่แนะนำในการติดตั้งไลบรารีนี้คือผ่าน Composer ยังใหม่กับนักแต่งเพลงใช่ไหม?
ดูเพิ่มเติมที่ CHANGELOG สำหรับรายละเอียดเกี่ยวกับการอัปเกรดเวอร์ชัน
composer require seregazhuk/react-promise-testing --dev
ใช้คุณลักษณะ seregazhukReactPromiseTestingAssertsPromise
หรือขยายคลาสการทดสอบของคุณจากคลาส seregazhukReactPromiseTestingTestCase
ซึ่งขยาย PHPUnit TestCase
เอง
MyTest คลาสสุดท้ายขยาย TestCase {/** @test */ฟังก์ชั่นสาธารณะ Promise_fulfills_with_a_response_object() {$browser = new ClueReactBuzzBrowser($this->eventLoop());$promise = $browser->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :ระดับ); - -
ใช้ลักษณะ:
ใช้ PHPUnitFrameworkTestCase; ใช้ seregazhukReactPromiseTestingAssertsPromise; คลาสสุดท้าย MyTest ขยาย TestCase {use AssertsPromise;/** @test */public function allowance_fulfills_with_a_response_object() {$browser = new ClueReactBuzzBrowser($this->eventLoop());$promise = $browser->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :ระดับ); - -
การทดสอบข้างต้นเป็นการตรวจสอบว่าสัญญาที่ระบุเป็นไปตามอินสแตนซ์ของ ResponseInterface
เพื่อยืนยันคำมั่นสัญญา เราจำเป็นต้องดำเนินการวนซ้ำ ก่อนการทดสอบแต่ละครั้ง จะมีการสร้างอินสแตนซ์ใหม่ของลูปเหตุการณ์ (ภายในเมธอด setUp()
) หากคุณต้องการลูปเพื่อสร้างการพึ่งพาของคุณ คุณ ควร ใช้เมธอด eventLoop()
เพื่อดึงข้อมูล
public function assertPromiseFulfills(PromiseInterface $promise, int $timeout = null): void
การทดสอบจะล้มเหลวหาก $promise
ปฏิเสธ
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการแก้ไขสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะเวลาที่กำหนด การทดสอบจะล้มเหลว เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
PromiseFulfillsTest คลาสสุดท้ายขยาย TestCase {/** @test */public function allowance_fulfills(): void{$deferred = new Deferred();$deferred->reject();$this->assertPromiseFulfills($deferred->promise(), 1); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 189 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบPromiseFulfillTest::promise_fulfills ล้มเหลวในการยืนยันคำสัญญาที่เป็นจริง คำสัญญาถูกปฏิเสธ
assertPromiseFulfillsWith(PromiseInterface $promise, $value, int $timeout = null): void
การทดสอบจะล้มเหลวหาก $promise
ไม่เป็นไปตาม $value
ที่ระบุ
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการปฏิบัติตามสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะเวลาที่กำหนด การทดสอบจะล้มเหลว เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
คลาสสุดท้าย PromiseFulfillsWithTest ขยาย TestCase {/** @test */public function allowance_fulfills_with_a_specified_value(): void{$deferred = new Deferred();$deferred->resolve(1234);$this->assertPromiseFulfillsWith($deferred->promise(), 1); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 180 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบPromiseFulfillsWithTest::promise_fulfills_with_a_specified_value ไม่สามารถยืนยันได้ว่าสัญญาเป็นไปตามค่าที่ระบุ ไม่สามารถยืนยันได้ว่ามีการแข่งขัน 1234 รายการ คาดว่าจะเป็น 1
assertPromiseFulfillsWithInstanceOf(PromiseInterface $promise, string $class, int $timeout = null): void
การทดสอบล้มเหลวหาก $promise
ไม่เป็นไปตามอินสแตนซ์ของ $class
ที่ระบุ
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการปฏิบัติตามสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะเวลาที่กำหนด การทดสอบจะล้มเหลว เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
PromiseFulfillsWithInstanceOfTest คลาสสุดท้ายขยาย TestCase {/** @test */public function allowance_fulfills_with_an_instance_of_class(): void{$deferred = new Deferred();$deferred->resolve(new MyClass);$this->assertPromiseFulfillsWithInstanceOf($deferred->promise(), MyClass: :ระดับ); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 180 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบสัญญาปฏิบัติตามด้วยอินสแตนซ์ของการทดสอบ::promise_fulfills_with_an_instance_of_class ล้มเหลวในการยืนยันสัญญาที่ปฏิบัติตามค่าของคลาส MyClass
assertPromiseRejects(PromiseInterface $promise, int $timeout = null): void
การทดสอบจะล้มเหลวหาก $promise
เป็นไปตามนั้น
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการแก้ไขสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะหมดเวลาที่ระบุ ระบบจะปฏิเสธด้วย ReactPromiseTimerTimeoutException
เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
PromiseRejectsTest คลาสสุดท้ายขยาย TestCase {/** @test */public function allowance_rejects(): void{$deferred = new Deferred();$deferred->resolve();$this->assertPromiseRejects($deferred->promise()); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 175 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบPromiseRejectsTest::promise_rejects ล้มเหลวในการยืนยันคำสัญญาที่ปฏิเสธ ทำตามสัญญาแล้ว
assertPromiseRejectsWith(PromiseInterface $promise, string $reasonExceptionClass, int $timeout = null): void
การทดสอบล้มเหลวหาก $promise
ไม่ปฏิเสธด้วยคลาสข้อยกเว้นที่ระบุ
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการแก้ไขสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะหมดเวลาที่ระบุ ระบบจะปฏิเสธด้วย ReactPromiseTimerTimeoutException
เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
PromiseRejectsWithTest คลาสสุดท้ายขยาย TestCase {/** @test */public function allowance_rejects_with_a_specified_reason(): void{$deferred = new Deferred();$deferred->reject(new LogicException());$this->assertPromiseRejectsWith($deferred->promise(), InvalidArgumentException::คลาส); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 136 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบPromiseRejectsWithTest::promise_rejects_with_a_specified_reason ล้มเหลวในการยืนยันว่าสัญญาปฏิเสธด้วยเหตุผลที่ระบุ ไม่สามารถยืนยันได้ว่า LogicException Object (...) เป็นอินสแตนซ์ของคลาส "InvalidArgumentException"
assertTrueAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
การทดสอบจะล้มเหลวหากค่าที่ห่อหุ้มไว้ในสัญญาไม่สอดคล้องกับภาคแสดงที่กำหนดเอง
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการแก้ไขสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะหมดเวลาที่ระบุ ระบบจะปฏิเสธด้วย ReactPromiseTimerTimeoutException
เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
คลาสสุดท้าย AssertTrueAboutPromiseTest ขยาย TestCase {/** @test */public function allowance_encapsulates_integer(): void{$deferred = new Deferred();$deferred->resolve(23);$this->assertTrueAboutPromise($deferred->promise(), function ($ วาล) {ส่งคืน is_object($val); - - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 136 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบAssertTrueAboutPromiseTest::promise_encapsulates_integer ล้มเหลวในการยืนยันว่าเท็จเป็นจริง
assertFalseAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
การทดสอบจะล้มเหลวหากค่าที่ห่อหุ้มไว้ใน Promise สอดคล้องกับภาคแสดงที่กำหนดเอง
คุณสามารถระบุ $timeout
เป็นวินาทีเพื่อรอการแก้ไขสัญญา หากไม่ปฏิบัติตามสัญญาภายในระยะหมดเวลาที่ระบุ ระบบจะปฏิเสธด้วย ReactPromiseTimerTimeoutException
เมื่อไม่ได้ระบุ การหมดเวลาจะถูกตั้งค่าเป็น 2 วินาที
คลาสสุดท้าย AssertFalseAboutPromiseTest ขยาย TestCase {/** @test */public function allowance_encapsulates_object(): void{$deferred = new Deferred();$deferred->resolve(23);$this->assertFalseAboutPromise($deferred->promise(), function ($ วาล) {กลับมา is_int($val); - - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 136 ms หน่วยความจำ: 4.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseTestingtestsAssertFalseAboutPromiseTest::promise_encapsulates_object ล้มเหลวในการยืนยันว่าจริงเป็นเท็จ
function waitForPromiseToFulfill(PromiseInterface $promise, int $timeout = null)
ตัวช่วยนี้สามารถใช้ได้เมื่อคุณต้องการแก้ไขสัญญาและรับค่าการแก้ไข
พยายามแก้ไข $promise
ในวินาที $timeout
ที่ระบุ และส่งกลับค่าที่แก้ไขแล้ว หากไม่ได้ตั้ง $timeout
ไว้ 2 วินาทีตามค่าเริ่มต้น การทดสอบจะล้มเหลวหาก $promise
ไม่ปฏิบัติตาม
WaitForPromiseToFulfillTest คลาสสุดท้ายขยาย TestCase {/** @test */public function allowance_fulfills(): void{$deferred = new Deferred();$deferred->reject(new Exception());$value = $this->waitForPromiseToFulfill($deferred->promise ()); - -
PHPUnit 8.5.2 โดย Sebastian Bergmann และผู้มีส่วนร่วม ฉ 1 / 1 (100%) เวลา: 223 ms หน่วยความจำ: 6.00MB มีความล้มเหลว 1 ครั้ง: 1) seregazhukReactPromiseการทดสอบการทดสอบรอเพื่อสัญญาว่าจะปฏิบัติตามการทดสอบ::promise_fulfills ล้มเหลวในการปฏิบัติตามสัญญา มันถูกปฏิเสธโดยมีข้อยกเว้น
function waitForPromise(PromiseInterface $promise, int $timeout = null)
พยายามแก้ไข $promise
ที่ระบุในวินาที $timeout
ที่ระบุ หากไม่ได้ตั้ง $timeout
ไว้ 2 วินาทีตามค่าเริ่มต้น หากสัญญาบรรลุผลจะส่งกลับค่าการแก้ไข มิฉะนั้นจะเกิดข้อยกเว้น หากสัญญาปฏิเสธทำให้เกิดเหตุผลในการปฏิเสธ หากสัญญาไม่ปฏิบัติตาม $timeout
ที่ระบุ จะส่ง ReactPromiseTimerTimeoutException
ตัวช่วยนี้จะมีประโยชน์เมื่อคุณต้องการรับค่าจากสัญญาที่ปฏิบัติตามในลักษณะซิงโครนัส:
$value = $this->waitForPromise($cache->get('key'));