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

  annotations, jms-serializer, php, phpspec

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[]
     * @SerializerType("array<SomeNameSpaceDTOPickupPointDTO>")
     */
    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:

[email protected]:/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:DoctrineCommonAnnotationsAnnotationException("[Semantical Error] The annotation "@JMSSerializerAnnotationType" in property SomeNameSpaceDTOPickupPointsDTO::$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?

Source: Ask PHP

LEAVE A COMMENT