2013-06-10 27 views
6

Tôi bắt đầu nghĩ về tích hợp liên tục cho các mẫu ghép trong Symfony.Kiểm tra đơn vị mẫu Twig

  1. Mẫu là logic độc lập.
  2. Có lỗi trong các mẫu. Nhưng trong quá trình phát triển, tôi không muốn bị phân tâm bởi kiểm tra bằng mắt.

Có bất kỳ giải pháp làm sẵn nào cho đơn vị kiểm tra tệp twig trong bản giao hưởng không?

+0

Bạn có thể nói rõ vấn đề bạn đang đề cập đến không? Đơn vị thử nghiệm một mẫu? và những gì khác? – cmt

+0

Tôi muốn thực hiện một kiểm tra đầy đủ để kiểm tra mẫu. Xác nhận các mẫu (lỗi cho cú pháp, sử dụng đúng các phần mở rộng). Kiểm tra mẫu logic. Để kiểm tra logic? Tôi muốn sử dụng các bài kiểm tra đơn vị. Nhưng đối với có thể sử dụng cái gì khác để xác nhận, giống như lint. – nonlux

+1

Twig lint đã tồn tại. Trong symfony2 bạn có thể chạy 'php app/console twig: lint '. – cmt

Trả lời

4

Ngoài xác minh tính chính xác về cấu trúc và cú pháp của cành mẫu tập tin của bạn bằng cách linting họ, bạn có thể cũng đơn vị kiểm tra logic của các mẫu Twig của bạn. Ví dụ: bạn có thể xác minh hành vi chính xác của cấu trúc if-elseif-else-endif và bạn có thể thực hiện việc đó một cách độc lập, tức là không cần phải đi qua bộ điều khiển với tất cả các phụ thuộc của chúng.

Hãy xem https://github.com/journeymonitor/control/blob/2645c69/src/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig. Đó là một mẫu rất đơn giản, nhưng nó có một số lượng hành vi - tùy thuộc vào giá trị của testresult.exitCode, các tên nhãn khác nhau phải là đầu ra.

Tại https://github.com/journeymonitor/control/blob/bc42e78/tests/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig.test.php, bạn có thể xem trường hợp kiểm tra đơn vị cho mẫu này.

Trường hợp kiểm tra thiết lập Twig_Environment mới, cho phép bạn tải tệp mẫu Twig và render nó với các đối tượng khác nhau được thông qua như một tham số.Kết quả của các hoạt động làm cho sau đó có thể được khẳng định như trong bất kỳ kiểm tra PHPUnit khác:

$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])); 

Lưu ý các lệnh shell trên dòng 8 và 9 - môi trường Twig lưu trữ các file mẫu của nó, và để xét nghiệm đáng tin cậy, bạn cần đảm bảo rằng vị trí bộ nhớ cache bị xóa trước mỗi lần chạy thử:

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

Testing cho lỗi cú pháp trong các mẫu cành lá:

Bạn có thể sử dụng dòng lệnh để thử nghiệm trên tất cả các mẫu cành lá vào một Bundle bằng cách sử dụng:

php app/console twig:lint @name of Bundle 

Ví dụ:

php app/console twig:lint @AcmeDemoBundle 

Kết quả sẽ là:

nếu không có bất kỳ lỗi cú pháp:

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 

Nếu có một lỗi cú pháp, nó sẽ phát hiện dòng mà lỗi cú pháp trong đó và lý do cho Lỗi cú pháp:

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

không nên các lỗi như vậy được hiển thị trực tiếp bởi ide khi đang di chuyển? – Guntram

+0

nó phụ thuộc vào IDE và nếu bạn đã bật kiểm tra cú pháp. Ví dụ, tôi sử dụng phpstorm và phải bật kiểm tra cú pháp đôi khi trong các mẫu cành lớn vì nó cần ram nhiều hơn tôi có: ( – Diguin

1

Sử dụng symfony lên kiểm tra một file cành lá cá nhân như thế này:

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

quả nếu OK:

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

quả nếu không OK (Tôi đã thêm một cú đúp xoăn nơi mà nó không thuộc về):

/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()