事は、発リンクがSymfony2の外側にあるとできないらしい。
Symfony 2 Functional Testing external URL
WebTestCaseはファンクショナルテストを実現するためのクラスですが、実際にはHTTPリクエストを行わない(与えられたパス情報を元にSymfony2内部でテスト対象となるHTMLを生成する)ため
$client->request('GET', 'http://example.com/');
とかやってもだめなので、自分でHTMLを取ってきて直接DomCrawlerに食わせるといいでしょう。
// http://example.com/内のid=fugaのリンク先がhttp://example.com/hoge/である確認
$this->assertFromToUrl('http://example.com/', 'http://example.com/hoge/', 'id("fuga")');
private function assertFromToUrl($fromUrl, $expectedToUrl, $targetLinkXpath)
{
if (!$html = file_get_contents($fromUrl)) {
$this->fail('リンク元ページ(' . $fromUrl . ')の取得に失敗しました');
}
$crawler = new Crawler($html);
$actualToUrl = $crawler->filterXPath($targetLinkXpath)->attr('href');
$this->assertEquals(
$expectedToUrl,
$actualToUrl,
'(' . $fromUrl . ')内の"' . $targetLinkXpath . '"のリンク先は(' . $expectedToUrl . ')になっているべきですが(' . $actualToUrl . ')になっています'
);
if (!file_get_contents($actualToUrl)) {
$this->fail('リンク先ページ(' . $actualToUrl . ')の取得に失敗しました');
}
}
的な。なお、ちゃんとしたブラウザテストをやるなら最初からSeleniumとか使ったほうが良いでしょう。