Code sur écran d'ordinateur

PHPUnit : comment tester un contrôleur qui lance une erreur

Imaginons que nous avons une méthode dans un controller comme cela:

/**
* @Route(path="/add", name="add", methods={"POST"})
*/
public function add(Request $request,): Response 
{
   throw new BadRequestHttpException('Error');
}

Pour tester que l’exception est bien levée il suffit d’écrire ceci

public function testList(): void
{
   $this->expectException(BadRequestHttpException::class);
   $client = self::createClient();
   $client->catchExceptions (false);
   $crawler = $client->request(
      Request::METHOD_POST,
      '/add'
   );
}

La première fonction expectException indique à phpunit que la méthode va retourner une erreur.

La deuxième catchExceptions évite que l’exception soit affichée sur le terminal lors des tests

Testing Project Test Suite
..[error] Uncaught PHP Exception SymfonyComponentHttpKernelExceptionBadRequestHttpException:...

Ainsi la suite des tests ne sera pas interrompue.

Laisser un commentaire