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

Posted

技术标签:

【中文标题】简单的控制器功能测试失败【英文标题】:Simple controller functional test failing 【发布时间】:2014-06-05 20:15:24 【问题描述】:

这是我对 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() 的工作原理,从默认示例复制没有通过吗?我的测试位于 AcademicsBundle > 测试 > AdviseeControllerTest.php

输出的消息(带有--verbose和-debug)是:

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

【问题讨论】:

运行测试时的错误信息是什么? @Javad 我编辑了我的问题以包含这个 确保/create/adviseeSet 为真。确保您的测试类在 namespace Academics\AcademicsBundle\Tests\Controller; 的命名空间中 我的命名空间是正确的,与一些通过实体单元测试相比。 你在测试类的构造中有什么东西吗?你清除缓存了吗? 【参考方案1】:

我的爬虫需要跟踪重定向,所以我添加了:

    $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>'

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

【讨论】:

嗨,我遇到了同样的问题,但我在虚拟主机上。你是如何添加 followRedirect() 的?像这样 ? $crawler = $client-&gt;request('GET', '/blog/'); $crawler-&gt;followRedirect();

以上是关于简单的控制器功能测试失败的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过 AutoConfigureMockMvc 自动配置时集成测试失败

Mongoose .lean() 方法的相等性测试失败

TryUpdateModel 仅在更新子对象的单元测试中失败

Spring Boot 应用程序在 mockmvc 测试中失败

JHipster:测试微服务时收到 401 Unauthorized

eBIRST开关系统测试工具