在将Symfony 3.4升级到Symfony 4.2时,除了在渲染Twig并使用app.session.get('my_session_variable')
的控制器上进行的功能测试之外,我都通过了所有单元测试。
使用标准app.session
,session
始终为null
。
我得到了错误:
Twig\Error\RuntimeError : Impossible to invoke a method ("get") on a null variable.
即使我通过以下方式在测试设置中显式设置了会话,也似乎未设置会话:
$this->client->getContainer()->get('session')->set('my_session_variable', 'help');
代码如下:
测试类:
final class HomepageTest extends WebtestCase
{
public function setUp(): void
{
parent::setUp();
$this->client = static::createClient();
$this->router = $this->client->getContainer()->get('router');
}
public function testMyPatience(): void
{
$url = $this->router->generate('homepage');
$this->client->request('GET', $url);
$this->assertSame(200, $this->client->getResponse()->getStatusCode());
}
}
控制器类:
final class Homepage extends AbstractController
{
/**
* @Route("/homepage", name="homepage", methods={"GET"})
*/
public function index(): Response
{
return $this->render('homepage.html.twig');
}
}
树枝模板:
{% if app.session.get('my_session_variable') != null %}
<p>Session variable is set</p>
{% endif %}
config / test / framework.yaml:
framework:
test: true
session:
storage_id: session.storage.mock_file
答案 0 :(得分:0)
对于其他有此问题的人,解决方案是使用:
app.request.session.get('my_session_variable')
代替:
app.session.get('my_session_variable')