简单的控制器功能测试失败

时间:2014-06-05 20:15:25

标签: symfony phpunit

这是我第一次对Symfony2进行控制器单元测试。尽可能完整地从文档中复制,我只是断言包含一些文本。

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class AdviseeControllerTest extends WebTestCase
{
    public function testCreatePageContainsContent()
    {
        $client = static::createClient();

        $crawler = $client->request('GET', '/create/adviseeSet');

        $this->assertGreaterThan(
            0,
            $crawler->filter('html:contains("Name")')->count()
        );

    }
}

我的路线如下:

advisee_set_create:
    pattern: /create/adviseeSet
    defaults: { _controller: AcademicsBundle:Advisee:create }

此测试失败,以及声明包含任何类型内容的任何其他测试。有什么我不知道$ client-> request()或$ crawler-> filter()是如何工作的,从Default示例复制没有通过?我的测试生活在AcademicsBundle>测试> AdviseeControllerTest.php

输出的消息(同时包含--verbose和-debug)是:

...\AcademicsBundle\Tests\Controller\AdviseeControllerTest::testCreatePageContainsContent
Failed asserting that 0 is greater than 0.

1 个答案:

答案 0 :(得分:0)

我的抓取工具需要遵循重定向,所以我添加了:

    $client->followRedirect();

通过测试

    $content = $client->getResponse()->getContent();
    $this->assertEquals('shmee', $content);

我能够获得更有用的失败信息

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'shmee'
+'<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <meta http-equiv="refresh" content="1;url=http://localhost/create/adviseeSet" />
+
+        <title>Redirecting to http://localhost/create/adviseeSet</title>
+    </head>
+    <body>
+        Redirecting to <a href="http://localhost/create/adviseeSet">http://localhost/create/adviseeSet</a>.
+    </body>
+</html>'

我在尝试重定向时看到了缩短的路径。