2017-08-18 16 views
0

に従うことができない私は自分のSymfony 3.2アプリケーションの機能テストを書いています、と私は外部のウェブサイトへのいくつかのリンクをテストするために、良いアイデアだと思いました。ただし、WebTestCaseクライアントが外部リンクをクリックすると、リンクをたどるのではなく元のページが返されます。symfonyの機能テストは、外部リンク

私はこのようになりますページがあります。私のテストはこのようになりますし、パス/ link_testによってアクセスされる

// 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 %} 

を。

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

私はちょうど@Cyprianからこの答えを見つけました。

$クライアントは、実際に任意のHTTPリクエストを送信しないので、それは不可能です(あなたがWWWサーバを使用して「機能」のテストが無効になって実行しようとすることに気付くかもしれ - 彼らはまだ動作するはずです)。代わりに、httpリクエストをシミュレートし、通常のSymfonyのディスパッチを実行します。

それで、私の質問に答えました。