用于检查模板中呈现的内容的单元测试



我浏览了一下,没有找到我想要完成的事情的解决方案。

我在Symofny 5项目,我正在写一些Unit tests

我的测试目标是检查消息是否会像定义的那样出现。消息由twig模板渲染。我不太熟悉Symfony和关于测试的分支。我不知道,我是否可以以某种方式使用该分支模板为该条目呈现视图的输出,然后检查消息是否包含正确庄园的预期文本。

这是可行的吗?

能给我一些帮助和指导,作为这样的例子吗?

我认为它将来会对其他程序员有益。

我有一个像User这样的实体,我想获得状态,如:

$user->getStatus('ready); 

在树枝:

{% if item.status == 'ready' %}
<p>The status of user is {{ item.status }}</p>
{% endif %}

所以,我想断言,小枝模板呈现正确的输出给定的状态。

更新2:

根据你的评论,你可能试图一次测试多个东西。虽然它本身并不坏,但它可能不是您所称的单元测试。在理想的应用程序中,您希望将数据持久性逻辑与呈现逻辑完全分离。

如果不知道你想做什么,我无法提供任何有意义的代码示例,但我可以给你一些一般的指针:

  • 你可以测试你的持久化逻辑本身而不需要枝条。如果你想测试你的数据是否正确地保留了一些默认值,你可以简单地断言从数据库中检索到的对象。
  • 相反,如果你需要检查你的模板是否正确渲染,你可以模拟所有你需要的数据,提供虚拟对象等等,一切都应该一样。
  • 如果你真的想把它们放在一起,作为一个整体测试应用程序,那么你应该研究适当的集成测试,实际调用你的端点正确的HTTP请求和断言收到的HTTP响应。

更新1:我已经根据您更新的问题更新了示例

我不太确定你到底想要完成什么,但似乎你想断言树枝模板被正确渲染。

首先,你需要弄清楚最终的结果。首先让我们假设你的模板是:

<html>
{% if user.status is not empty %}
<p>The status of user is {{ user.status }}</p>
{% endif %}
</html>

那么你的测试代码应该是这样的:

public function testTwigRender(): void
{
$expected=<<<'EXPECTED'
<html>
<p>The status of user is ready</p>
</html>
EXPECTED;
$user = new User();
$user->setStatus('ready');
$twig = self::$kernel->getContainer()->get('twig');
$actual = $twig->render('AppBundle::app/template.html.twig', ['user' => $user]);
self::assertEquals($expected, $actual);
}