@arnoldo.moen  
To test asynchronous code in PHPUnit, you can use the Generator feature. Here's a step-by-step guide on how to do it:
- Update PHPUnit to version 9.4 or above, as earlier versions do not support asynchronous testing.
 - Define a test case class that extends PHPUnitFrameworkTestCase (if you don't have one already).
 - Define an asynchronous test method with the prefix test and suffix Async. For example, testAsyncExample().
 - Convert the test method into a generator function by adding a yield statement before each asynchronous call. This will pause the execution until the asynchronous call is complete. You can use the yield statement as many times as necessary.
 
1
2
3
4
5
6
  | 
public function testAsyncExample(): Generator
{
    $promisor = new Promisor();
    yield $promisor->doAsyncTask();
    // more async calls using yield
}
 | 
 
- Use PHPUnit's runTestInSeparateProcess() annotation to ensure that the test method is run in a separate process. This is necessary for handling parallel processing.
 
1
2
3
4
5
6
7
  | 
/**
 * @runInSeparateProcess
 */
public function testAsyncExample(): Generator
{
    // test code
}
 | 
 
- In the test method, use the assertXxx() methods provided by PHPUnit to perform assertions on the asynchronously generated results.
 
1
2
3
4
5
6
  | 
public function testAsyncExample(): Generator
{
    $promisor = new Promisor();
    $result = yield $promisor->doAsyncTask();
    $this->assertEquals('expected', $result);
}
 | 
 
- Run the test case with PHPUnit using the following command:
 
1
  | 
vendor/bin/phpunit --testsuite suiteName
  | 
 
Make sure to replace suiteName with the appropriate name of your test suite.
By following these steps, PHPUnit will be able to handle asynchronous code testing with ease.