在twig模板中测试语法错误:
您可以使用命令行通过使用以下方法将所有树枝模板测试到一个Bundle中:
php app/console twig:lint @name of Bundle
Run Code Online (Sandbox Code Playgroud)
例:
php app/console twig:lint @AcmeDemoBundle
Run Code Online (Sandbox Code Playgroud)
结果将是:
如果没有任何语法错误:
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
Run Code Online (Sandbox Code Playgroud)
如果存在语法错误,它将检测行中的语法错误以及语法错误的原因:
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
Run Code Online (Sandbox Code Playgroud)
除了通过lint来验证Twig模板文件的结构和语法正确性之外,您还可以对Twig模板的逻辑进行单元测试.
例如,您可以验证if-elseif-else-endif构造的正确行为,并且可以单独执行此操作,也就是说,无需通过具有所有依赖项的控制器.
请查看https://github.com/journeymonitor/control/blob/2645c69/src/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig.这是一个非常简单的模板,但它确实有一些行为 - 取决于值testresult.exitCode,必须输出不同的标签名称.
在https://github.com/journeymonitor/control/blob/bc42e78/tests/AppBundle/Resources/views/testcases/_testresults-overview-testresult-label.html.twig.test.php,您可以看到单元测试用例这个模板.
测试用例设置了一个新的Twig_Environment,它允许您加载Twig模板文件,并将render其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]));
Run Code Online (Sandbox Code Playgroud)
注意第8行和第9行的shell命令--Twig环境缓存其模板文件,为了进行可靠的测试,您需要确保在每次测试运行之前擦除缓存位置:
`rm -rf /var/tmp/journeymonitor-twig-tests-cache`;
`mkdir -p /var/tmp/journeymonitor-twig-tests-cache`;
Run Code Online (Sandbox Code Playgroud)
WebTestCase在(自 Symfony 2.0 以来的 phpunit 扩展TestCase)/ (自 Symfony 2.5 以来KernelTestCasephpunit 的扩展)内部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());
Run Code Online (Sandbox Code Playgroud)