【问题标题】:PHPUnit asserting identical HTML structure regardless of whitespacePHPUnit 断言相同的 HTML 结构,无论空格如何
【发布时间】:2011-11-02 07:48:47
【问题描述】:

我有一个命令行脚本,它生成一些我正在尝试使用 PHPUnit 进行单元测试的 HTML。请注意,此 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 的断言:

assertXmlStringEqualsXmlFile 在这种情况下完美运行:

public function testHtmlIsIdentical()
{
    $this->report->setupSomeData('test data');
    $this->assertXmlStringEqualsXmlFile('expected.html', $this->report->generateHtml());
}

【问题讨论】:

    标签: php html unit-testing phpunit


    【解决方案1】:

    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());
    

    preservewhitespace

    assertEqualXMLStructure 也值得研究,因为它也可以用来比较 HTML:

    assertEqualXMLStructure(
        DOMElement $expectedElement,
        DOMElement $actualElement
        [, bool $checkAttributes = false,
        string $message = '']
    )
    

    但是您可能会再次遇到空格问题,因此您可能需要在比较之前去掉这些问题。使用 DOM 的好处是,如果文档不匹配,您可以获得更好的错误报告。

    Practical PHPUnit: Testing XML generation 中描述了另一种测试 XML/HTML 生成的方法。

    【讨论】:

    • 我无法让您的第二个示例运行,但它让我找到了完美运行的 assertXmlStringEqualsXmlString() 方法!
    • @Andrew 哦,也许 assertEqualXMLStructure 是 PHPUnit 3.6,我没有检查。对不起!但很高兴它为你解决了
    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2018-08-31
    • 2014-03-06
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多