php - Using JMS Serializer with PHPSpec testing case causes The annotation @JMSSerializerAnnotationType does not exist, or could not be auto-loaded

I have a function to transform array into object.

public function transform(array $pickupPoints): array
{
    return SerializerBuilder::create()
        ->setSerializationContextFactory(function () {
            return SerializationContext::create()
                ->setSerializeNull(true);
        })
        ->setPropertyNamingStrategy(new IdenticalPropertyNamingStrategy())
        ->build()
        ->fromArray(['pickupPoints' => $pickupPoints], PickupPointsDTO::class)
        ->getPickupPoints();
}

My DTO looks like this:

final class PickupPointsDTO
{
    /**
     * @var PickupPointDTO[]
     * @Serializer\Type("array<SomeNameSpace\DTO\PickupPointDTO>")
     */
    private $pickupPoints;

It working without any troubles when Im executing the code.

But when I'm trying do make some tests in PHPSpec I have problem as follows:

container@09932a507bab:/var/www/project$ php bin/phpspec run tests/spec/SomeNameSpace/PickupPointsDataTransformerSpec.php 
SomeNameSpace/PickupPointsDataTransformer     
  16  - it is transforming data to pickup point dto array
      exception [exc:Doctrine\Common\Annotations\AnnotationException("[Semantical Error] The annotation "@JMS\Serializer\Annotation\Type" in property SomeNameSpace\DTO\PickupPointsDTO::$pickupPoints does not exist, or could not be auto-loaded.")] has been thrown.

                  50%                                     50%                    2
1 specs
2 examples (1 passed, 1 broken)
57ms

It looks like PHPSpec is not correctly autoloading vendor classes, and in result it cannot find given annotations.

Anyone know how to force PHPSpec to read Annotations properly?

Answer

Solution:

There is a solution for this, but I don't really like it, since it's deprecated. Looking for a better one.

For now, the only solution which work for me:

function it_is_initializable()
{
    AnnotationRegistry::registerLoader('class_exists');
    // ...
}

Source