Pustaka yang menyediakan serangkaian pernyataan yang mudah digunakan untuk menguji janji ReactPHP. Di bawah tenda menggunakan petunjuk/php-block-react untuk memblokir janji.
Saat menguji kode dan janji asinkron, segala sesuatunya bisa menjadi sedikit rumit. Pustaka ini menyediakan serangkaian pernyataan yang mudah digunakan untuk menguji janji ReactPHP.
Daftar isi
Instalasi
Mulai Cepat
Pernyataan
menegaskanPromiseFulfills()
menegaskanPromiseFulfillsWith()
menegaskanPromiseFulfillsWithInstanceOf()
menegaskanPromiseRejects()
menegaskanPromiseRejectsWith()
menegaskanTrueAboutPromise()
menegaskanFalseAboutPromise()
Pembantu
tungguPromiseToFulfill()
tungguJanji()
Perpustakaan memerlukan PHP 8.0 atau lebih tinggi.
Cara yang disarankan untuk menginstal perpustakaan ini adalah melalui Komposer. Baru mengenal Komposer?
Lihat juga CHANGELOG untuk detail tentang peningkatan versi.
composer require seregazhuk/react-promise-testing --dev
Gunakan sifat seregazhukReactPromiseTestingAssertsPromise
atau perluas kelas pengujian Anda dari kelas seregazhukReactPromiseTestingTestCase
, yang dengan sendirinya memperluas PHPUnit TestCase
.
kelas terakhir MyTest memperluas TestCase {/** @test */fungsi publik janji_fulfills_with_a_response_object() {$browser = new ClueReactBuzzBrowser($this->eventLoop());$promise = $browser->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :kelas); } }
Menggunakan sifat:
gunakan PHPUnitFrameworkTestCase; gunakan seregazhukReactPromiseTestingAssertsPromise; kelas terakhir MyTest memperluas TestCase {use AssertsPromise;/** @test */fungsi publik janji_fulfills_with_a_response_object() {$browser = new ClueReactBuzzBrowser($this->eventLoop());$promise = $browser->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :kelas); } }
Pengujian di atas memeriksa apakah janji tertentu dipenuhi dengan instance ResponseInterface
.
Untuk membuat pernyataan janji kita perlu menjalankan perulangan. Sebelum setiap pengujian, instance baru dari loop peristiwa sedang dibuat (di dalam metode setUp()
). Jika Anda memerlukan loop untuk membangun dependensi, Anda harus menggunakan metode eventLoop()
untuk mengambilnya.
public function assertPromiseFulfills(PromiseInterface $promise, int $timeout = null): void
Pengujian gagal jika $promise
ditolak.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji diselesaikan. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, pengujian gagal. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir PromiseFulfillsTest memperluas TestCase {/** @test */fungsi publik janji_fulfills(): void{$deferred = new Deferred();$deferred->reject();$this->assertPromiseFulfills($deferred->promise(), 1); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 189 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsPromiseFulfillTest::promise_fulfills Gagal menyatakan bahwa janji dipenuhi. Janji ditolak.
assertPromiseFulfillsWith(PromiseInterface $promise, $value, int $timeout = null): void
Pengujian gagal jika $promise
tidak memenuhi $value
yang ditentukan.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji dipenuhi. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, pengujian gagal. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir PromiseFulfillsWithTest memperluas TestCase {/** @test */fungsi publik janji_fulfills_with_a_specified_value(): void{$deferred = new Deferred();$deferred->resolve(1234);$this->assertPromiseFulfillsWith($deferred->promise(), 1); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 180 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsPromiseFulfillsWithTest::promise_fulfills_with_a_specified_value Gagal menyatakan bahwa janji dipenuhi dengan nilai yang ditentukan. Gagal menyatakan bahwa 1234 pertandingan diharapkan 1.
assertPromiseFulfillsWithInstanceOf(PromiseInterface $promise, string $class, int $timeout = null): void
Pengujian gagal jika $promise
tidak memenuhi instance $class
yang ditentukan.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji dipenuhi. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, pengujian gagal. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir PromiseFulfillsWithInstanceOfTest memperluas TestCase {/** @test */fungsi publik janji_fulfills_with_an_instance_of_class(): void{$deferred = new Deferred();$deferred->resolve(new MyClass);$this->assertPromiseFulfillsWithInstanceOf($deferred->promise(), MyClass: :kelas); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 180 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsPromiseFulfillsWithWithInstanceOfTest::promise_fulfills_with_an_instance_of_class Gagal menyatakan bahwa janji dipenuhi dengan nilai kelas MyClass.
assertPromiseRejects(PromiseInterface $promise, int $timeout = null): void
Tes gagal jika $promise
terpenuhi.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji diselesaikan. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, janji tersebut akan ditolak dengan ReactPromiseTimerTimeoutException
. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir PromiseRejectsTest memperluas TestCase {/** @test */fungsi publik janji_rejects(): void{$deferred = new Deferred();$deferred->resolve();$this->assertPromiseRejects($deferred->promise()); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 175 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsPromiseRejectsTest::promise_rejects Gagal menyatakan bahwa janji ditolak. Janji terpenuhi.
assertPromiseRejectsWith(PromiseInterface $promise, string $reasonExceptionClass, int $timeout = null): void
Pengujian gagal jika $promise
tidak ditolak dengan kelas pengecualian yang ditentukan.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji diselesaikan. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, janji tersebut akan ditolak dengan ReactPromiseTimerTimeoutException
. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir PromiseRejectsWithTest memperluas TestCase {/** @test */fungsi publik janji_rejects_with_a_specified_reason(): void{$deferred = new Deferred();$deferred->reject(new LogicException());$this->assertPromiseRejectsWith($deferred->promise(), InvalidArgumentException::kelas); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 136 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsPromiseRejectsWithTest::promise_rejects_with_a_specified_reason Gagal menyatakan bahwa janji ditolak dengan alasan tertentu. Gagal menegaskan bahwa Objek LogicException (...) adalah turunan dari kelas "InvalidArgumentException".
assertTrueAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
Pengujian gagal jika nilai yang dikemas dalam Janji tidak sesuai dengan predikat arbitrer.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji diselesaikan. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, janji tersebut akan ditolak dengan ReactPromiseTimerTimeoutException
. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir AssertTrueAboutPromiseTest memperluas TestCase {/** @test */fungsi publik janji_encapsulates_integer(): void{$deferred = new Deferred();$deferred->resolve(23);$this->assertTrueAboutPromise($deferred->promise(), function ($ val) {kembalikan is_object($val); }); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 136 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsAssertTrueAboutPromiseTest::promise_encapsulates_integer Gagal menyatakan bahwa salah itu benar.
assertFalseAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
Pengujian gagal jika nilai yang dikemas dalam Janji sesuai dengan predikat arbitrer.
Anda dapat menentukan $timeout
dalam hitungan detik untuk menunggu janji diselesaikan. Jika janji tidak dipenuhi dalam batas waktu yang ditentukan, janji tersebut akan ditolak dengan ReactPromiseTimerTimeoutException
. Jika tidak ditentukan, batas waktu diatur ke 2 detik.
kelas terakhir AssertFalseAboutPromiseTest memperluas TestCase {/** @test */fungsi publik janji_encapsulates_object(): void{$deferred = new Deferred();$deferred->resolve(23);$this->assertFalseAboutPromise($deferred->promise(), function ($ val) {kembalikan is_int($val); }); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 136 ms, Memori: 4,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsAssertFalseAboutPromiseTest::promise_encapsulates_object Gagal menyatakan bahwa benar itu salah.
function waitForPromiseToFulfill(PromiseInterface $promise, int $timeout = null)
.
Helper ini dapat digunakan ketika Anda ingin menyelesaikan suatu janji dan mendapatkan nilai resolusi.
Mencoba menyelesaikan $promise
dalam $timeout
detik yang ditentukan dan mengembalikan nilai yang diselesaikan. Jika $timeout
tidak disetel, gunakan 2 detik secara default. Tes gagal jika $promise
tidak terpenuhi.
kelas terakhir WaitForPromiseToFulfillTest memperluas TestCase {/** @test */fungsi publik janji_fulfills(): void{$deferred = new Deferred();$deferred->reject(new Exception());$value = $this->waitForPromiseToFulfill($deferred->promise ()); } }
PHPUnit 8.5.2 oleh Sebastian Bergmann dan kontributor. F 1/1 (100%) Waktu: 223 ms, Memori: 6,00MB Ada 1 kegagalan: 1) seregazhukReactPromiseTestingtestsWaitForPromiseToFulfillTest::promise_fulfills Gagal memenuhi janji. Itu ditolak dengan Pengecualian.
function waitForPromise(PromiseInterface $promise, int $timeout = null)
.
Mencoba menyelesaikan $promise
yang ditentukan dalam $timeout
detik yang ditentukan. Jika $timeout
tidak disetel, gunakan 2 detik secara default. Jika janji dipenuhi, kembalikan nilai resolusi, jika tidak maka akan muncul pengecualian. Jika janji ditolak, berikan alasan penolakan, jika janji tidak dipenuhi dalam $timeout
yang ditentukan, akan muncul ReactPromiseTimerTimeoutException
.
Pembantu ini dapat berguna ketika Anda perlu mendapatkan nilai dari janji yang dipenuhi secara sinkron:
$nilai = $ini->waitForPromise($cache->dapatkan('kunci'));