使用phpunit在html字符串中断言某些内容的最佳方法是什么?
在Zend应用程序中,有一些断言assertQuery*
可用。但是如果你不在Zend应用程序中? assertXml*
看起来不合适。
例如,考虑到更改id属性的位置不会使测试失败,您如何断言<div ... id="myId" ...>...</div>
中存在标记$htmlString
?
答案 0 :(得分:5)
我建议您使用某些库解析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());
答案 1 :(得分:0)
我遇到了完全相同的问题,并且找不到现代的解决方案,因此我想到了https://packagist.org/packages/phpfui/html-unit-tester
您基本上希望通过验证程序运行尽可能多的生成的html和CSS。
最好不要针对模板进行验证(除非您想确保没有任何变化,但这是您可能想要的不同条件/测试)。
您真正关心的是HTML(和CSS)的格式正确。 这适应了将来的功能和与数据相关的更改。您的代码必须产生有效的HTML和CSS。
https://packagist.org/packages/phpfui/html-unit-tester根据w3.org标准进行验证,因此将始终与最新的HTML规范保持一致。
真正有用的单元测试,以确保您所做的事情不会古怪,只能在您针对它编写的浏览器上使用。