我开始考虑在Symfony中对twig模板进行持续集成。
- 一个模板是独立的逻辑。
- 模板中可能会有错误。但在开发过程中,我不想被视觉检查分心。
在Symfony中有没有现成的解决方案来对twig文件进行单元测试?
我开始考虑在Symfony中对twig模板进行持续集成。
在Symfony中有没有现成的解决方案来对twig文件进行单元测试?
测试twig模板内的语法错误:
您可以使用命令行对一个Bundle中的所有twig模板进行测试:
php app/console twig:lint @name of Bundle
例子:
php app/console twig:lint @AcmeDemoBundle
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
如果有语法错误,它将检测到语法错误所在的行以及语法错误的原因:
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
if-elseif-else-endif
结构的正确行为,而无需通过具有所有依赖项的控制器。testresult.exitCode
的值,必须输出不同的标签名称。Twig_Environment
,使您能够加载Twig模板文件并将其渲染
为传递的不同Testresult
对象。然后可以像任何其他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]));
请注意第8行和第9行的shell命令 - Twig环境会缓存其模板文件,为了进行可靠的测试,您需要确保在每次测试运行之前清除缓存位置:
`rm -rf /var/tmp/journeymonitor-twig-tests-cache`;
`mkdir -p /var/tmp/journeymonitor-twig-tests-cache`;
WebTestCase
成为 phpunit TestCase
的扩展,而在 Symfony 2.5 以后,KernelTestCase
成为 phpunit TestCase
的扩展。 $twig = self::$kernel->getContainer()->get('twig');
$html = $twig->render('AppBundle::app/something.html.twig', ['content' => 'I am some variable value']);
self::assertEquals($html, $response->getContent());
使用Symfony测试单个Twig文件的方法如下:
./app/console twig:lint /yourproject/yourtwigs/views/yourtwig.html.twig
如果一切正常,结果如下:
OK in /yourproject/yourtwigs/views/yourtwig.html.twig
如果不正确,结果如下(我在错误的位置添加了一个花括号):
/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()
php app/console twig:lint <file>
。 - cmt