2013-09-05 40 views
2

這與HTML字符串PHPUnit的某些內容斷言的最佳方式?PHPUnit的,聲稱HTML內容

在Zend的應用,有斷言assertQuery*可用的布赫。但是如果你不在Zend的應用程序中? assertXml*看起來不合適。

例如,如果考慮到更改id屬性的位置不會使測試失敗,那麼如何聲明標記<div ... id="myId" ...>...</div>存在於$htmlString中?

回答

4

我建議你使用一些庫解析HTML字符串,然後使用庫API寫斷言。

有很多不錯的HTML/XML解析器,例如:

http://symfony.com/doc/current/components/dom_crawler.html

利用這一點,你可以通過使用CSS選擇器,XPath的等訪問任何所需的節點,如果一個屬性你可以檢查獨立於其位置而存在。

$crawler = new Crawler($html); 
$this->assertEquals(1, $crawler->filter('div#elementId')->count()); 
+2

這是一個很好的辦法。考慮到與'Crawler'你的榜樣,我是相當的PHP的思維內置函數或預安裝的庫。我會用'DOMDocument'來做同樣的事情,例如'$ doc = DOMDocument; $ doc-> loadHTML($ HTML); $這 - > assertTrue((布爾)$ doc->的getElementById( 'elementId'));' –