Création d'un test unitaire pour un template Twig

Publié le 02/07/2021 • Mis à jour le 02/07/2021


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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.


Démo HTML du snippet

This is case 1! 🎉


<?php

declare(strict_types=1);

namespace App\Tests\Templates;

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
    {
        self::bootKernel();
        $this->twig = self::getContainer()->get(Environment::class);
    }

    /**
     * @return iterable<string, array>
     */
    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);
    }
}

 Plus sur Stackoverflow   Lire la doc  Snippet aléatoire