PHPUnit,断言HTML内容

8
哪种方法是使用phpunit在HTML字符串中断言特定内容的最佳方式?
在Zend应用程序中有很多可用的assertions assertQuery*。 但如果您不在Zend应用程序中怎么办? assertXml*看起来不合适。
例如,如何断言标签 ...存在于$htmlString中,考虑到更改id属性的位置不会导致测试失败?
1个回答

12

我建议你使用一些库来解析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());

您也可以编写自定义断言来自动化此过程,使得断言为:

$this->assertHtmlContainsSelector($html, 'div#elementId');

4
这是个不错的方法。考虑到你提到的Crawler示例,我更倾向于使用PHP内置函数或预安装库来完成任务。我会用类似于DOMDocument的方式来实现,即 $doc = DOMDocument; $doc->loadHTML($html); $this->assertTrue((bool)$doc->getElementById('elementId')); - Al_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接