Php 我怎样做树枝';s{{app.user}}在测试内部不为空?

Php 我怎样做树枝';s{{app.user}}在测试内部不为空?,php,symfony,twig,Php,Symfony,Twig,我有一个Symfony测试用例,在这个测试用例中,我测试了对网站管理区域的身份验证。以下是测试用例(非常简单): 问题是我的代码失败,因为响应带有500 HTTP状态代码,其中包含由Symfony发送的以下消息: 无法访问空变量的属性(“电子邮件”)。(500内部服务器错误) 我知道错误的来源是TWIG,显然,设置UsernamePasswordToken对于TWIG变量{{app.user}}是不够的-它被设置为null,因此当我调用: <span class="navbar-

我有一个Symfony测试用例,在这个测试用例中,我测试了对网站管理区域的身份验证。以下是测试用例(非常简单):

问题是我的代码失败,因为响应带有500 HTTP状态代码,其中包含由Symfony发送的以下消息:

无法访问空变量的属性(“电子邮件”)。(500内部服务器错误)

我知道错误的来源是TWIG,显然,设置
UsernamePasswordToken
对于TWIG变量
{{app.user}}
是不够的-它被设置为null,因此当我调用:

<span class="navbar-text">
    Logged in as {{ app.user.email }} - <a href="{{ path('app_logout') }}">Log out</a>
</span>

为什么不使用过滤器
| default()
?这样,如果未定义
user.email
,您可以用一些随机值替换它。我不想仅仅因为测试的行为不同于普通用户在浏览器中的行为而专门修改我的模板。我想修改测试用例,使其行为与浏览器中的普通用户完全相同。为什么不生成一个正确的用户并登录?正确是什么意思?我的数据库中已经有一个用户使用了此电子邮件和密码(通过fixtures),至少我的
logInAs
的最后一个实现不是再现了转到登录表单并提交它的操作吗?
<span class="navbar-text">
    Logged in as {{ app.user.email }} - <a href="{{ path('app_logout') }}">Log out</a>
</span>
private function logInAs(string $email, string $plainPassword): void
{
    $csrfToken = $this->client->getContainer()->get('security.csrf.token_manager')->getToken('authenticate');
    $this->client->request('POST', '/login', [
        'email' => $email,
        'password' => $plainPassword,
        '_csrf_token' => $csrfToken
    ]);
    $this->client->followRedirect();
}