Как выполнить модульное тестирование вывода HTML с помощью PHPUnit? - PullRequest
4 голосов
/ 11 января 2011

Я новичок в PHPUnit, и у меня возникли некоторые проблемы с модульным тестированием вывода HTML.

Мой тест следующий:

/**
* @covers Scrap::removeTags
*
*/
public function testRemoveTags() {

    // Variables
    $simple_parameter        = 'script';
    $array_parameter         = array('script', 'div');
    $html                    = '<div class="pubanunciomrec" style="background:#FFFFFF;"><script type="text/javascript"><!-- google_ad_slot = "9853257829"; google_ad_width = 300; google_ad_height = 250; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div><table></table>';

    // Expected HTML
    $expected_html_whitout_script     = new DOMDocument;
    $expected_html_whitout_script->loadHTML('<div class="pubanunciomrec" style="background:#FFFFFF;"></div><table></table>');
    $expected_html_without_script_div = new DOMDocument;
    $expected_html_without_script_div->loadHTML('<table></table>');

    // Actual HTML
    $actual_whitout_script     = new DOMDocument;
    $actual_whitout_script->loadHTML($this->scrap->removeTags($html, $simple_parameter));
    $actual_without_script_div = new DOMDocument;
    $actual_without_script_div->loadHTML($this->scrap->removeTags($html, $array_parameter));


    // Test
    $this->assertEquals($expected_html_whitout_script, $actual_whitout_script);
    $this->assertEquals($expected_html_without_script_div, $actual_without_script_div);

}

Моя проблема заключается в том, что объект DOMDocument генерируетнекоторый HTML-код, и я не могу его сравнить.Как я могу напечатать объект DOMDocument, чтобы увидеть результат?Любые подсказки о том, как сравнить HTML?

Извините за мой плохой английский.

С наилучшими пожеланиями,

Ответы [ 5 ]

5 голосов
/ 12 ноября 2013

С 2013 года существует еще один способ проверки вывода HTML с использованием PHPUnit.Он использует метод assertTag (), который можно найти в PHPUnit 3.7 и 3.8.

Например:

// Matcher that asserts that there is an element with an id="my_id".
$matcher = array('id' => 'my_id');

// Matcher that asserts that there is a "span" tag.
$matcher = array('tag' => 'span');

// Matcher that asserts that there is a "div", with an "ul" ancestor and a "li"
// parent (with class="enum"), and containing a "span" descendant that contains
// an element with id="my_test" and the text "Hello World".
$matcher = array(
    'tag'      => 'div',
    'ancestor' => array('tag' => 'ul'),
    'parent'   => array(
        'tag'        => 'li',
        'attributes' => array('class' => 'enum')
    ),
    'descendant' => array(
        'tag'   => 'span',
        'child' => array(
            'id'      => 'my_test',
            'content' => 'Hello World'
        )
    )
);

// Use assertTag() to apply a $matcher to a piece of $html.
$this->assertTag($matcher, $html);

Подробнее на официальном сайте PHPUnit .

2 голосов
/ 01 апреля 2015

Вы должны быть немного осторожны при сравнении выведенного HTML с правильным шаблоном.Ваш HTML сильно изменится, и вы можете потратить слишком много времени на поддержание ваших тестов.

См. Этот пост для альтернативного подхода .

2 голосов
/ 12 января 2011

Вы можете рассмотреть вопрос о Селен . Это браузерный инструмент для тестирования функциональности веб-сайта.

Вы пишете сценарии, которые включают в себя загрузку веб-браузера и симуляцию кликов и других действий, а затем выполняете утверждения для проверки, например, наличия определенных элементов страницы, в правильном месте или содержащих ожидаемые значения.

Тесты могут быть написаны с использованием среды IDE, которая работает как плагин для Firefox, но они могут выполняться на всех основных браузерах.

У нас есть набор тестов Selenium, которые выполняются как часть нашего процесса CI, что позволяет нам очень быстро увидеть, если что-то пошло не так с нашим выводом HTML.

В целом, это очень мощный инструмент тестирования.

Кроме того, он интегрируется с PHPUnit (и другими языковыми инструментами), поэтому он отвечает на ваш вопрос, хотя, вероятно, не так, как вы думали.

1 голос
/ 27 декабря 2016

Вы можете сравнить две строки HTML с помощью метода PHPUnit assertXmlStringEqualsXmlString:

$this->assertXmlStringEqualsXmlString($emailMarkup, $html);

, где $emailMarkup - ожидаемая строка HTML $html - текущая строка HTML

Внимание!HTML-строки должны быть XML-допустимыми.Например, используйте

<br/>

вместо

<br>

Также атрибуты тега должныиметь значения, например, использовать

<hr noshade="true">

вместо

<hr noshade>

1 голос
/ 12 января 2011

Вы можете использовать saveHtml метод DOMDocument и сравнить вывод.

...