簡體   English   中英

PHPUnit 斷言相同的 HTML 結構,無論空格如何

[英]PHPUnit asserting identical HTML structure regardless of whitespace

我有一個命令行腳本,它生成一些我正在嘗試使用 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());
}

好吧,有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 的好處是,如果文檔不匹配,您可以獲得更好的錯誤報告。

測試 XML/HTML 生成的另一種方法在Practical PHPUnit:測試 XML 生成中描述。

如果您只關心有效的HTML,但不匹配確切的模板,則建議使用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規范。

不完全是您要尋找的,而是您應該執行的非常有效的測試。

十年后,安德魯斯的評論仍然有用:)

$expectedHtml =
    <<<HTML
        <html>
            ...
        </html>
    HTML;

$result = $someHtmlRenderer->render($someData);

self::assertXmlStringEqualsXmlString($expectedHtml, $result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM