2016-09-04 27 views
0

我正在执行测试以查看某个路由是否正常工作。页面/路由发现在http://localhost/login,当我在浏览器中它的工作正常,我已经测试了这没有饼干和我的缓存清除。symfony功能测试的500个状态代码

但是,只要我在phpunit LoginControllerTest类中测试它,我会收到一个500状态码内部服务器错误。

<?php 

namespace Tests\AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class LoginControllerTest extends WebTestCase 
{ 
    public function testLoginPage() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/login'); 
     // var_dump($client->getRequest()->getContent()); // Is empty 
     // 200 => 'OK' 
     $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
    } 
    // ... 

所以运行phpunit失败:

Failed asserting that 500 matches expected 200. 

这里是security.yml在没有任何用处的理解问题的情况下。

# app/config/security.yml 
security: 
    providers: 
     db_provider: 
      entity: 
       class: AppBundle:Users 
       property: Username 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] 

    firewalls: 
     secured_area: 
      pattern: ^/ 
      anonymous: ~ 

     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     default: 
      pattern: ^/manage 
      guard: 
       authenticators: 
        - app.token_authenticator 

    access_control: 
     - { path: ^/manage, roles: ROLE_USER } 

该路线已定义并正常工作(如预期)。

// ... 
class LoginController extends Controller 
{ 
    /** 
    * @Route("/login", name="LoginForm") 
    */ 
    public function loginFormAction(Request $request) 
    { 
    // ... 

回答

2

500错误可能是由您的案例中的任何内容引起的。

你在这种情况下可以做的是转储响应的内容并检查Symfony调试消息。

我通常直接在终端使用这些代码段用于快速检测这样的错误:

if (!$response->isSuccessful()) { 
    $block = $crawler->filter('div.text_exception > h1'); 
    if ($block->count()) { 
     $error = $block->text(); 
    } 
} 

其中div.text_exception > h1是Symfony2的调试页面中的XPath的消息本身

然后,只需打印$error

+1

感谢您让我走向正确的方向。我一直在查看响应的输出,并使用您的代码在终端中打印错误。我发现使用'''crawler-> filter('title');''提供了一个很好的友好错误信息 - 你给的xpath实际上并不存在我得到的响应。我现在应该能够修复这些错误。 – iyop45