Una biblioteca que proporciona un conjunto de afirmaciones convenientes para probar las promesas de ReactPHP. Debajo del capó usa pista/php-block-react para bloquear promesas.
Al probar código asincrónico y promesas, las cosas pueden ser un poco complicadas. Esta biblioteca proporciona un conjunto de afirmaciones convenientes para probar las promesas de ReactPHP.
Tabla de contenido
Instalación
Inicio rápido
Afirmaciones
afirmarPromiseFulfills()
afirmarPromiseFulfillsWith()
afirmarPromiseFulfillsWithInstanceOf()
afirmarPromiseRejects()
afirmarPromiseRejectsWith()
afirmarTrueAboutPromise()
afirmarFalseAboutPromise()
Ayudantes
esperarParaPromiseToFulfill()
esperar por promesa()
La biblioteca requiere PHP 8.0 o superior.
La forma recomendada de instalar esta biblioteca es a través de Composer. ¿Nuevo en Compositor?
Consulte también el CHANGELOG para obtener detalles sobre las actualizaciones de versiones.
composer require seregazhuk/react-promise-testing --dev
Utilice el rasgo seregazhukReactPromiseTestingAssertsPromise
o extienda sus clases de prueba desde la clase seregazhukReactPromiseTestingTestCase
, que a su vez extiende PHPUnit TestCase
.
la clase final MyTest extiende TestCase {/** @test */función pública promesa_fulfills_with_a_response_object() {$navegador = new ClueReactBuzzBrowser($this->eventLoop());$promise = $navegador->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :clase); } }
Usando el rasgo:
use PHPUnitFrameworkTestCase;use seregazhukReactPromiseTestingAssertsPromise;la clase final MyTest extiende TestCase {use AssertsPromise;/** @test */función pública promesa_fulfills_with_a_response_object() {$navegador = new ClueReactBuzzBrowser($this->eventLoop());$promise = $navegador->get('http://www.google.com/');$this->assertPromiseFulfillsWithInstanceOf($promise, ResponseInterface: :clase); } }
La prueba anterior comprueba que una promesa especificada se cumpla con una instancia de ResponseInterface
.
Para hacer afirmaciones prometedoras, debemos ejecutar el ciclo. Antes de cada prueba, se crea una nueva instancia del bucle de eventos (dentro del método setUp()
). Si necesita el bucle para construir sus dependencias , debe usar el método eventLoop()
para recuperarlo.
public function assertPromiseFulfills(PromiseInterface $promise, int $timeout = null): void
La prueba falla si la $promise
se rechaza.
Puede especificar $timeout
en segundos para esperar a que se resuelva la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, la prueba falla. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final PromiseFulfillsTest extiende TestCase {/** @test */función pública promesa_fulfills(): void{$diferido = nuevo Diferido();$diferido->reject();$this->assertPromiseFulfills($diferido->promesa(), 1); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 189 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsPromiseFulfillTest::promise_fulfills No se pudo afirmar que la promesa se cumple. La promesa fue rechazada.
assertPromiseFulfillsWith(PromiseInterface $promise, $value, int $timeout = null): void
La prueba falla si la $promise
no cumple con un $value
especificado.
Puede especificar $timeout
en segundos para esperar a que se cumpla la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, la prueba falla. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final PromiseFulfillsWithTest extiende TestCase {/** @test */función pública promesa_fulfills_with_a_specified_value(): void{$deferred = new Deferred();$deferred->resolve(1234);$this->assertPromiseFulfillsWith($deferred->promise(), 1); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 180 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsPromiseFulfillsWithTest::promise_fulfills_with_a_specified_value No se pudo afirmar que la promesa se cumpla con un valor específico. No se pudo afirmar que se esperaban 1234 coincidencias.
assertPromiseFulfillsWithInstanceOf(PromiseInterface $promise, string $class, int $timeout = null): void
La prueba falla si la $promise
no se cumple con una instancia de $class
especificada.
Puede especificar $timeout
en segundos para esperar a que se cumpla la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, la prueba falla. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final PromiseFulfillsWithInstanceOfTest extiende TestCase {/** @test */función pública promesa_fulfills_with_an_instance_of_class(): void{$deferred = new Deferred();$deferred->resolve(new MyClass);$this->assertPromiseFulfillsWithInstanceOf($deferred->promise(), MyClass: :clase); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 180 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsPromiseFulfillsWithWithInstanceOfTest::promise_fulfills_with_an_instance_of_class No se pudo afirmar que la promesa se cumpla con un valor de clase MyClass.
assertPromiseRejects(PromiseInterface $promise, int $timeout = null): void
La prueba falla si se cumple la $promise
.
Puede especificar $timeout
en segundos para esperar a que se resuelva la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, se rechaza con ReactPromiseTimerTimeoutException
. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final PromiseRejectsTest extiende TestCase {/** @test */función pública promesa_rejects(): void{$diferido = nuevo Diferido();$diferido->resolve();$this->assertPromiseRejects($diferido->promise()); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 175 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsPromiseRejectsTest::promise_rejects No se pudo afirmar que se rechaza la promesa. La promesa se cumplió.
assertPromiseRejectsWith(PromiseInterface $promise, string $reasonExceptionClass, int $timeout = null): void
La prueba falla si $promise
no se rechaza con una clase de excepción especificada.
Puede especificar $timeout
en segundos para esperar a que se resuelva la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, se rechaza con ReactPromiseTimerTimeoutException
. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final PromiseRejectsWithTest extiende TestCase {/** @test */función pública promesa_rejects_with_a_specified_reason(): void{$deferred = new Deferred();$deferred->reject(new LogicException());$this->assertPromiseRejectsWith($deferred->promise(), InvalidArgumentException::clase); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 136 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsPromiseRejectsWithTest::promise_rejects_with_a_specified_reason No se pudo afirmar que la promesa se rechaza por un motivo específico. No se pudo afirmar que el objeto LogicException (...) es una instancia de la clase "InvalidArgumentException".
assertTrueAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
La prueba falla si el valor encapsulado en la Promesa no se ajusta a un predicado arbitrario.
Puede especificar $timeout
en segundos para esperar a que se resuelva la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, se rechaza con ReactPromiseTimerTimeoutException
. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final AssertTrueAboutPromiseTest extiende TestCase {/** @test */función pública promesa_encapsulates_integer(): void{$diferido = nuevo Diferido();$diferido->resolve(23);$this->assertTrueAboutPromise($diferido->promesa(), función ($ valor) {return is_object($val); }); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 136 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsAssertTrueAboutPromiseTest::promise_encapsulates_integer No se pudo afirmar que lo falso es verdadero.
assertFalseAboutPromise(PromiseInterface $promise, callable $predicate, int $timeout = null): void
La prueba falla si el valor encapsulado en la Promesa se ajusta a un predicado arbitrario.
Puede especificar $timeout
en segundos para esperar a que se resuelva la promesa. Si la promesa no se cumplió en el tiempo de espera especificado, se rechaza con ReactPromiseTimerTimeoutException
. Cuando no se especifica, el tiempo de espera se establece en 2 segundos.
La clase final AssertFalseAboutPromiseTest extiende TestCase {/** @test */función pública promesa_encapsulates_object(): void{$diferido = nuevo Diferido();$diferido->resolve(23);$this->assertFalseAboutPromise($diferido->promesa(), función ($ valor) {return is_int($val); }); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 136 ms, Memoria: 4,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsAssertFalseAboutPromiseTest::promise_encapsulates_object No se pudo afirmar que lo verdadero es falso.
function waitForPromiseToFulfill(PromiseInterface $promise, int $timeout = null)
.
Este asistente se puede utilizar cuando desee resolver una promesa y obtener el valor de resolución.
Intenta resolver una $promise
en un $timeout
segundos especificado y devuelve el valor resuelto. Si $timeout
no está configurado, utiliza 2 segundos de forma predeterminada. La prueba falla si la $promise
no se cumple.
La clase final WaitForPromiseToFulfillTest extiende TestCase {/** @test */función pública promesa_fulfills(): void{$diferido = nuevo Diferido();$diferido->rechazar(nueva excepción());$valor = $this->waitForPromiseToFulfill($diferido->promesa ()); } }
PHPUnit 8.5.2 por Sebastian Bergmann y colaboradores. F 1 / 1 (100%) Tiempo: 223 ms, Memoria: 6,00 MB Hubo 1 fallo: 1) seregazhukReactPromiseTestingtestsWaitForPromiseToFulfillTest::promise_fulfills No se pudo cumplir una promesa. Fue rechazado con excepción.
function waitForPromise(PromiseInterface $promise, int $timeout = null)
.
Intenta resolver una $promise
especificada en un $timeout
especificado en segundos. Si $timeout
no está configurado, utiliza 2 segundos de forma predeterminada. Si la promesa se cumple, devuelve un valor de resolución; de lo contrario, genera una excepción. Si la promesa se rechaza, arroja el motivo del rechazo, si la promesa no se cumple en un $timeout
específico, arroja ReactPromiseTimerTimeoutException
.
Esta ayuda puede resultar útil cuando necesite obtener el valor de la promesa cumplida de forma sincrónica:
$valor = $this->waitForPromise($cache->get('clave'));