Test Timeout

Control runaway async code by ensuring that tests complete within a giving time period using the #[Timeout] Attribute!

When writing asynchronous unit and integration tests there could be a possibility that your code executes for longer than expected or hangs on an async operation not properly handled. In these situations it can be helpful to fail the test after a defined period of time to ensure other tests can operate and test processing can finish without having to manually kill the process. You can easily add a timeout to a test by adding the #[Timeout] Attribute to the test, TestCase, or TestSuite6. The value provided should be the amount of milliseconds the test is expected to complete in.

<?php

use Cspray\Labrador\AsyncUnit\TestCase;
use Cspray\Labrador\AsyncUnit\Attribute\Test;
use Cspray\Labrador\AsyncUnit\Attribute\Timeout;

class MyExceptionTestCase extends TestCase {

    #[Test]
    #[Timeout(100);
    public function checkExceptionThrown() {
        yield new Delayed(150);
        yield $this->asyncAssert()->floatEquals(3.14, 3.14);
    }

}

This test will be marked as a failure with a message indicating that it did not complete before the given timeout period.

Last updated