【问题标题】:PHPUnit, asserting html contentPHPUnit,断言 html 内容
【发布时间】:2013-09-09 16:26:13
【问题描述】:

用 phpunit 断言 html 字符串中某些内容的最佳方法是什么?

在 Zend 应用程序中有大量可用的断言assertQuery*。但是,如果您不在 Zend 应用程序中呢? assertXml* 看起来不太合适。

例如,考虑到更改 id 属性的位置不会使测试失败,您如何断言标签 <div ... id="myId" ...>...</div> 存在于 $htmlString 中?

【问题讨论】:

    标签: php zend-framework phpunit


    【解决方案1】:

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

    【讨论】:

    • 这是一个好方法。考虑到您使用Crawler 的示例,我宁愿考虑php 内置函数或预安装的库。我将使用DOMDocument 进行类似的操作,即$doc = DOMDocument; $doc->loadHTML($html); $this->assertTrue((bool)$doc->getElementById('elementId'));
    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2016-09-14
    • 1970-01-01
    • 2018-11-27
    • 2020-02-16
    • 2013-07-26
    • 2011-08-06
    • 2013-05-02
    相关资源
    最近更新 更多