Tester sur Symfony - Partie 2

Présentation

Cette page correspond à ma prise de notes suite au suivi de formation Tester sur Symfony présent sur l’excellent site GrafiKart.

Chapitre 4 - Tester un validateur

Le lien

  • Création d’un validator : php bin/console make:validator,

  • Documentation sur le validation custom : ici,

  • Création d’un mock : lien,

      // Création d'un contexte via un Mock
      $context = $this->getMockBuilder(ExecutionContextInterface::class)->getMock();
      $context
          ->expects($this->once())
          ->method('buildViolation');
  • WillReturn : il faut le faire dans le même appel que celui précédemment fait …

  • Petite différence d’implémentation : plutôt que de faire un if, j’avais tenté un $expectedViolation ? $this->once() : $this->never() mais c’est moins lisible …

  • Ils ont pensé à tout : disableOriginalConstructor pour ne pas appeler le constructor par défaut,

Chapitre 5 - Tester un EventSubscriber

Le lien

  • Création d’un nouveau “subscriber” : php bin/console make:subscriber,
  • Documentation : ici,
  • Bonne pratique : ne pas tester directement l’appel de la méthode mais plutôt passer par le dispatcher.

Chapitre 6 - Tester un Controller

Le lien

  • J’ai utilisé ce test là au tout début : $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); car la trace dans l’autre cas était illisible,
  • Commande pour créer un controlleur : php bin/console make:controller PageController,
  • Pratique : accès au formulaire depuis le bouton:
$form = $crawler->selectButton("Se connecter")->form([
            'email' => 'john@doe.fr',
            'password' => 'fakepassword'
        ]);
        $client->submit($form);
  • Pour ne pas encoder à la main le mot de passe :
// [...]
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
// [...]
    private $encoder;

    public function __construct(UserPasswordEncoderInterface $encoder) {
        $this->encoder = $encoder;
    }
// [...]
        $user->setPassword( $this->encoder->encodePassword($user, '012345'));
// [...]
  • Je trouve que c’est quand même la classe : You have requested a non-existent service "orm.doctrine.entity-manager". Did you mean this: "doctrine.orm.entity_manager"?,
  • La mise en place de la gestion de la partie “Authentifiée” est celle décrite (+/-) ici,