symfony功能测试的500状态代码

时间:2016-09-04 21:20:27

标签: php symfony phpunit

我正在进行测试,看看某条路线是否正常工作。页面/路由位于http://localhost/login,当我在浏览器中访问它时工作正常,我已经测试了这个没有cookie并清除了我的缓存。

但是,只要我在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 个答案:

答案 0 :(得分:3)

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 :(得分:1)

这个问题有点老了,但有可能(至少从 symfony 5.2 开始)

$client->catchExceptions(false);

你会直接在phpunit输出中得到堆栈跟踪