我正在为我的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的内容,而不是链接页面的内容。
我错过了什么吗?我不应该在功能测试中关注外部链接吗?
谢谢!
答案 0 :(得分:1)
我刚从@Cyprian那里听到了这个答案。
这是不可能的,因为$ client实际上并没有发送任何http请求(你可能会注意到当你尝试运行你的&#34;功能&#34;测试时禁用www服务器 - 他们仍然应该管用)。而不是它模拟http请求并运行正常的Symfony调度。
所以,这回答了我的问题。