phpunit с Zend_Dom_Query - PullRequest
       20

phpunit с Zend_Dom_Query

0 голосов
/ 11 ноября 2011
$domDoc = new DOMDocument();
$domDoc->loadHTML($docSrc);
$xpath  = new DOMXPath($domDoc);
$nodeList = $xpath->query("//a[@class='active' and @href='/advanced-2-0.html']");
$this->assertTrue($nodeList->length == 1);

Этот код прекрасно работает, если $docSrc выглядит примерно так:

$docSrc = '<div><a class="active" href = "/advanced-2-0.html']"></div>';

, но когда я назначаю HTML для $docSrc, например:

$this->dispatch($_SERVER['REQUEST_URI']);
$html = $this->getResponse()->getBody();

itне работаетЯ печатаю $html и внутри все в порядке;Я не могу объяснить это, потому что в обоих случаях это строка.

Я получаю ошибку:

AccountControllerTest::testIfAllow DOMDocument::loadHTML(): Namespace prefix fb is not defined in Entity, line: 54

Я также попытался:

$domDoc->loadHTML("$this->getResponse()->getBody()");

Ошибки не появляются, но результат пуст.

1 Ответ

1 голос
/ 12 ноября 2011

Вы должны использовать FBML в своем выводе, например, <fb:like ...> для кнопки «Мне нравится».Вы можете обернуть вывод в элемент <html>, который объявляет пространство имен.

Обновление: Теперь, когда я смотрю на наш код, нам также пришлось переключиться на loadXML()loadHTML() и установите флаг recover в libxml:

$html = '<html xmlns:fb="http://www.facebook.com/2008/fbml">'
        . $this->getResponse()->getBody()
        . '</html>';
$domDoc = new DOMDocument();
$domDoc->recover = true; // attempt to handle non-well-formed documents
$domDoc->loadXML($html);
...
...