Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using JMS Serializer with PHPSpec testing case causes The annotation @JMS\Serializer\Annotation\Type does not exist, or could not be auto-loaded #1392

Open
kgasienica opened this issue Sep 15, 2021 · 0 comments

Comments

@kgasienica
Copy link

kgasienica commented Sep 15, 2021

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?


A little update, when I added a line below it started to work, so it may be sth wrong with my configuration. Any1 know what may be wrong?

    function it_is_initializable()
    {
        AnnotationRegistry::registerLoader('class_exists');
        // ...
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant