Création d'un test unitaire pour un template Twig
Publié le 02/07/2021 • Actualisé le 02/07/2021
Dans ce bout de code, nous voyons comment créer un test unitaire pour un template Twig. Le template contient un simple tag :if
comme suivant :
{% if case == 1 %}This is case 1! 🎉{% else %}This is NOT case 1.{% endif %}
On utilise un fournisseur de tests ; les deux premiers cas sont les cas nominaux, le dernier vérifie qu'une exception est levée puisque la variable case
n'est pas passée au template. On a une erreur quand on utilise le mode strict de Twig qui est activé par le paramètre strict_variables
.
<?php
declare(strict_types=1);
namespace App\Tests\Integration\Twig;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Twig\Environment;
use Twig\Error\RuntimeError;
final class Snippet152Test extends KernelTestCase
{
private Environment $twig;
protected function setUp(): void
{
$this->twig = self::getContainer()->get(Environment::class);
}
/**
* @return iterable<string, array{0: array<string,mixed>, 1: string, 2: bool}>
*/
public function snippet1527Provider(): iterable
{
yield 'case 1, nomimal case' => [['case' => 1], 'this is case 1', false];
yield 'case 2, nomimal case' => [['case' => 2], 'this is NOT case 1', false];
yield 'case 3, wrong type' => [['case' => 'c'], 'this is NOT case 1', false]; // no strict type at the Twig level
yield 'exception case' => [['case_not_provided' => 99], 'RuntimeError!', true];
}
/**
* @param array<string, mixed> $context
*
* @dataProvider snippet1527Provider
*/
public function testSnippet152(array $context, string $needle, bool $expectException): void
{
if ($expectException) {
$this->expectException(RuntimeError::class);
}
$haystack = $this->twig->render('snippet/code/_152_demo.html.twig', $context);
self::assertStringContainsStringIgnoringCase($needle, $haystack);
}
}
This is case 1! 🎉
Plus sur Stackoverflow Lire la doc Snippet aléatoire
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez m'aider à votre tour de plusieurs manières : (cliquez sur le lien "reply" dans à droite pour me contacter )
- Me remonter des erreurs ou typos.
- Me remonter des choses qui pourraient être améliorées.
- Aimez et repostez !
- Suivez moi sur Bluesky 🦋
- Inscrivez-vous au flux RSS.
- Cliquez sur les boutons Plus sur Stackoverflow pour me faire gagner des badges "annonceur" 🏅.
Merci et à très bientôt sur Strangebuzz ! 😉
