我有一个命令行脚本,可以生成一些 HTML,我正在尝试使用 PHPUnit 对其进行单元测试。请注意,此 HTML 是浏览器看不到,所以 Selenium 不是这个问题的正确解决方案。
我只关心比较实际的 HTML 结构。我在用着assertEquals()
但实际的strings
由于各种空白字符,可能不完全相同。
public function testHtmlIsIdentical()
{
$expectedReport = file_get_contents('expected.html');
$this->report->setupSomeData('test data');
$actualReport = $this->report->generateHtml();
$this->assertEquals($expectedReport, $actualReport);
}
我可以做什么来比较 HTML 的结构(节点)而不是 HTML 的字符串? PHPUnit 是否有允许这样做的功能?是否有用于比较 HTML 的独立库?
解决方案:
PHPUnit 有用于比较 XML 的断言:
- assertXmlFileEqualsXmlFile()
- assertXmlStringEqualsXmlFile()
- assertXmlStringEqualsXmlString()
The assertXmlStringEqualsXmlFile
在这种情况下完美工作:
public function testHtmlIsIdentical()
{
$this->report->setupSomeData('test data');
$this->assertXmlStringEqualsXmlFile('expected.html', $this->report->generateHtml());
}
嗯,有DomDocument如果你想检查 HTML 元素的顺序是否匹配,你可以使用它。
如果所有不同的地方都是多余的空格,可以尝试:
$expectedDom = new DomDocument();
$expectedDom->loadHTMLFile('expected.html');
$expectedDom->preserveWhiteSpace = false;
$actualDom = new DomDocument();
$actualDom->loadHTML($this->report->generateHtml());
$actualDom->preserveWhiteSpace = false;
$this->assertEquals($expectedDom->saveHTML(), $actualDom->saveHTML());
See preservewhitespace.
还值得研究的是assertEqualXMLStructure因为这也可以用来比较 HTML:
assertEqualXMLStructure(
DOMElement $expectedElement,
DOMElement $actualElement
[, bool $checkAttributes = false,
string $message = '']
)
但是您可能会再次遇到空格问题,因此您可能需要在比较之前删除这些空格。使用 DOM 的好处是,如果文档不匹配,您可以获得更好的错误报告。
测试 XML/HTML 生成的另一种方法在实用 PHPUnit:测试 XML 生成.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)