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,