2013-06-10 9 views
6

Zacząłem myśleć o ciągłej integracji dla szablonów gałązek w Symfony.Testowanie szablonów twigowych

  1. Szablon jest niezależną logiką.
  2. W szablonach występują błędy. Ale w procesie rozwoju nie chcę być rozpraszany przez wzrokową inspekcję.

Czy są jakieś gotowe rozwiązania do testowania jednostkowego pliku z gałązkami w symfonii?

+0

można jednoznacznie powiedzieć, jakie problemy masz na myśli? Jednostka testująca szablon? i co jeszcze? – cmt

+0

Chcę przeprowadzić pełne inspekcje w celu sprawdzenia szablonów. Sprawdzanie poprawności szablonów (błędy składni, poprawne użycie rozszerzeń). Sprawdzanie szablonu logicznego. Do sprawdzania logiki? Chciałbym skorzystać z testów jednostkowych. Ale może użyjesz czegoś innego do sprawdzania poprawności, na przykład jako lint. – nonlux

+1

Twig lint już istnieje. W symfony2 możesz uruchomić 'php app/console twig: lint '. – cmt

Odpowiedz

4

Oprócz sprawdzenia poprawności strukturalnej i syntaktyczną swoich Twig plików szablonów przez ich strzępienia, można także jednostka przetestuj logikę twoich szablonów Twig.

Na przykład można sprawdzić poprawność zachowania konstrukcji if-elseif-else-endif i można to zrobić w izolacji, to znaczy bez potrzeby przechodzenia przez kontrolery ze wszystkimi ich zależnościami.

Spójrz na https://github.com/journeymonitor/control/blob/2645c69/src/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig. Jest to bardzo prosty szablon, ale ma pewne zachowanie - w zależności od wartości testresult.exitCode, muszą być wyprowadzane różne nazwy etykiet.

W przypadku https://github.com/journeymonitor/control/blob/bc42e78/tests/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig.test.php widać przypadek testowy jednostki dla tego szablonu.

Sprawa testu konfiguruje nową Twig_Environment, który pozwala załadować plik szablonu twig i render to z różnych Testresult przedmiotów przekazanych jako parametr.Wynikiem operacji renderowania można następnie stwierdził, jak w żadnym innym teście PHPUnit:

$loader = new Twig_Loader_Filesystem(__DIR__ . '/../../../../../src/AppBundle/Resources/views/testcases/'); 
$twig = new Twig_Environment($loader, array(
    'cache' => '/var/tmp/journeymonitor-twig-tests-cache', 
)); 
$template = $twig->loadTemplate('_testresults-overview-testresult-label.html.twig'); 

$testresult = new \AppBundle\Entity\Testresult(); 
$testresult->setExitCode(0); 

$this->assertSame('success', $template->render(['testresult' => $testresult])); 

Note polecenia Shell na linii 8 i 9 - środowisko Gałązka buforuje swoje pliki szablonów, w celu uzyskania wiarygodnych testów należy się upewnić, że lokacja jest wycierane przed każdym testu:

`rm -rf /var/tmp/journeymonitor-twig-tests-cache`; 
`mkdir -p /var/tmp/journeymonitor-twig-tests-cache`; 
7

Testowanie błąd składni w szablonach gałązka:

Można użyć wiersza polecenia, aby przetestować na wszystkich szablonów gałązka w jeden Bundle za pomocą:

php app/console twig:lint @name of Bundle 

Przykład:

php app/console twig:lint @AcmeDemoBundle 

Wynikiem będzie:

, jeśli nie ma żadnych błędów składni:

OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/layout.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig 

Jeśli jest błąd składni, wykryje błąd składni linii, które się w nim i powodem błędu składni:

OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/layout.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig 
KO in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig (line 6) 
    4  
    5  {% block content %} 
>> 6   <form action="{{ ath('_demo_contact') }}" method="POST" id="contact_form"> 
>> The function "ath" does not exist. Did you mean "path", "logout_path" 
    7    {{ form_errors(form) }} 
    8  
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig 
OK in /var/www/SymBlog/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig 
+0

Czy takie błędy nie powinny być bezpośrednio wyświetlane przez idee w locie? – Guntram

+0

to zależy od IDE i jeśli masz włączone sprawdzanie składni. Na przykład używam phpstorm i muszę wyłączyć kontroler składni czasami w wielkich szablonach gałązek, ponieważ potrzebuje więcej pamięci RAM niż ja :( – Diguin

1

Zastosowanie do symfony sprawdzić pojedynczy plik gałązka tak:

./app/console twig:lint /yourproject/yourtwigs/views/yourtwig.html.twig 

wyniku, jeżeli OK:

OK in /yourproject/yourtwigs/views/yourtwig.html.twig 

Wynik jeśli nie OK (dodałem nawias klamrowy gdzie nie należał):

/yourproject/yourtwigs/views/yourtwig.html.twig (line 2) 
    1  {% include 'YourBundle:Includes:jquery.html.twig' %} 
>> 2  {{% include 'YourBundle:Includes:datatables.html.twig' %} 
>> Unexpected "}" 
    3  <script> 
    4  $(document).ready(function()