Symfony功能测试不能遵循外部链接

时间:2017-08-18 23:30:18

标签: php symfony phpunit

我正在为我的Symfony 3.2应用程序编写功能测试,我认为测试一些指向外部网站的链接是个好主意。但是,当我的WebTestCase客户端单击外部链接时,它将返回原始页面而不是链接。

我有一个看起来像这样的页面:

// views/default/link_test.html.twig
{% extends 'base.html.twig' %}
{% block body %}
    <p><a href="{{ path('homepage') }}">Here</a> is a test link.</p>
    <p><a href="http://ayso1447.org">There</a> is an external link.</p>
{% endblock %}

我的测试看起来像这样,可以通过路径/ link_test访问。

namespace Tests\AppBundle;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class FollowLinkFunctionalTest extends WebTestCase
{
    public function testFollowInternalLink()
    {
        $client = static::createClient();
        $crawler = $client->request('GET', '/link_test');
        $this->assertTrue($client->getResponse()->isSuccessful(), 'response status is 2xx');
        $link = $crawler->selectLink('Here')->link();
        $page = $client->click($link);
        $this->assertTrue($client->getResponse()->isSuccessful(), 'response status is 2xx');
        $this->assertContains('AYSO United New Mexico', $page->filter('h1')->eq(0)->text());
        $this->assertContains('AYSO United', $page->filter('h1')->eq(1)->text());
        $this->assertContains('Club News', $page->filter('h1')->eq(2)->text());
        $this->assertContains('External Resources', $page->filter('h1')->eq(3)->text());
    }

    public function testFollowExternalLink()
    {
        $client = static::createClient();
        $client->followRedirects(true);
        $crawler = $client->request('GET', '/link_test');
        $this->assertTrue($client->getResponse()->isSuccessful(), 'response status is 2xx');
        $link = $crawler->selectLink('There')->link();
        $page = $client->click($link);
        echo $page->text();
        $this->assertTrue($client->getResponse()->isSuccessful(), 'response status is 2xx');
        $this->assertContains('Westside', $page->filter('h1')->eq(0)->text());
    }
}

testFollowInternalLink传递,但testFollowExternalLink失败。 echo $page->text()显示link_test的内容,而不是链接页面的内容。

我错过了什么吗?我不应该在功能测试中关注外部链接吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我刚从@Cyprian那里听到了这个答案。

这是不可能的,因为$ client实际上并没有发送任何http请求(你可能会注意到当你尝试运行你的&#34;功能&#34;测试时禁用www服务器 - 他们仍然应该管用)。而不是它模拟http请求并运行正常的Symfony调度。

所以,这回答了我的问题。