Symfony功能测试在升级到2.2之后会产生无限循环


Symfony functional tests give infinity loops after upgrading to 2.2

我在Symfony从2.1升级到2.2后遇到了问题。当一次运行所有功能测试时(注意,当运行单个测试时不会发生这种情况,无论哪个),我得到一个错误,无限循环卡在

PHP Fatal error:  Maximum function nesting level of '150' reached, aborting! in project_path'vendor'symfony'symfony'src'Symfony'Component'ClassLoader'DebugClassLoader.php on line 81

跟踪部分:

...
14. Symfony'Component'BrowserKit'Client->submit() project_path'other_path'Tests'Controller'LoginControllerTest.php:53
15. Symfony'Component'BrowserKit'Client->request() project_path'vendor'symfony'symfony'src'Symfony'Component'BrowserKit'Client.php:224
16. Symfony'Bundle'FrameworkBundle'Client->doRequest() project_path'vendor'symfony'symfony'src'Symfony'Component'BrowserKit'Client.php:264
17. Symfony'Component'HttpKernel'Client->doRequest() project_path'vendor'symfony'symfony'src'Symfony'Bundle'FrameworkBundle'Client.php:111
18. Symfony'Component'HttpKernel'Kernel->handle() project_path'vendor'symfony'symfony'src'Symfony'Component'HttpKernel'Client.php:61
19. Symfony'Component'HttpKernel'DependencyInjection'ContainerAwareHttpKernel->handle() project_path'app'bootstrap.php.cache:411
20. Symfony'Component'HttpKernel'HttpKernel->handle() project_path'app'bootstrap.php.cache:1101
21. Symfony'Component'HttpKernel'HttpKernel->handleRaw() project_path'app'bootstrap.php.cache:975
22. Symfony'Component'HttpKernel'Debug'TraceableEventDispatcher->dispatch() project_path'app'bootstrap.php.cache:990
23. Symfony'Component'EventDispatcher'ContainerAwareEventDispatcher->dispatch() project_path'vendor'symfony'symfony'src'Symfony'Component'HttpKernel'Debug'TraceableEventDispatcher.php:135
24. Symfony'Component'EventDispatcher'EventDispatcher->dispatch() project_path'vendor'symfony'symfony'src'Symfony'Component'EventDispatcher'ContainerAwareEventDispatcher.php:167
25. Symfony'Component'EventDispatcher'EventDispatcher->doDispatch() project_path'vendor'symfony'symfony'src'Symfony'Component'EventDispatcher'EventDispatcher.php:53
26. call_user_func() project_path'vendor'symfony'symfony'src'Symfony'Component'EventDispatcher'EventDispatcher.php:164
27. Symfony'Component'HttpKernel'Debug'TraceableEventDispatcher->Symfony'Component'HttpKernel'Debug'{closure}() project_path'vendor'symfony'symfony'src'Symfony'Component'EventDispatcher'EventDispatcher.php:164
28. call_user_func() project_path'vendor'symfony'symfony'src'Symfony'Component'HttpKernel'Debug'TraceableEventDispatcher.php:447
29. Symfony'Component'Security'Http'Firewall->onKernelRequest() project_path'vendor'symfony'symfony'src'Symfony'Component'HttpKernel'Debug'TraceableEventDispatcher.php:447
30. Symfony'Component'Security'Http'Firewall'AbstractAuthenticationListener->handle() project_path'vendor'symfony'symfony'src'Symfony'Component'Security'Http'Firewall.php:66
31. Symfony'Component'Security'Http'Firewall'AbstractAuthenticationListener->onSuccess() project_path'vendor'symfony'symfony'src'Symfony'Component'Security'Http'Firewall'AbstractAuthenticationListener.php:143
32. Symfony'Component'ClassLoader'DebugClassLoader->loadClass() project_path'vendor'symfony'symfony'src'Symfony'Component'Security'Http'Firewall'AbstractAuthenticationListener.php:0
33. Symfony'Component'ClassLoader'DebugClassLoader->findFile() project_path'vendor'symfony'symfony'src'Symfony'Component'ClassLoader'DebugClassLoader.php:95
...

在我升级之前,所有的测试都工作得很好,现在他们在使用

时抛出这个错误:
$form = $crawler->selectButton('Login')->form();
$form['_password'] = '123ASDasd';
$form['_username'] = 'MattKing';
$crawler = $client->submit($form); //this is LoginControllerTest.php:53 from error above

$link = $crawler->selectLink('Matt King')->link();
$client->click($link); // --> error

$client = static::createClient();
$client->followRedirects(true);
$crawler = $client->request('GET', '/login'); // --> error

另一个问题是在使用默认symfony翻译函数时。切换用户的语言环境后,测试抛出了与上面相同的错误。当我注释掉切换语言环境时,就会出现其他错误(如上面的错误)。请注意,它可能是由与上面相同的问题引起的。

我已经找了几天原因,放弃了。知道怎么解决这个问题吗?

我也有同样的问题。我已经解决了这个问题,添加到我的php.ini:

xdebug.max_nesting_level = 200

XDebug不应该在您的生产服务器上运行,因此它不应该抛出错误。

(见本刊)