Regex&;PHPUnit断言:计算单词在重复模式中匹配的次数
我使用PHPUnit测试一个PHP函数的输出,该函数使用提供的数据生成HTMLRegex&;PHPUnit断言:计算单词在重复模式中匹配的次数,php,html,phpunit,Php,Html,Phpunit,我使用PHPUnit测试一个PHP函数的输出,该函数使用提供的数据生成HTMLoption标记 例如,这是函数的正确输出(我添加了行返回以提高可读性): 选择一个。。。 食品价值 barValue 市价 为了测试输出,我使用以下断言: $this->assertRegExp("/(<option value=\".*\" *(selected)? *>.*<\/option>)+/i", $res); $this->assertRegExp(“/(.*)+/i”
option
标记
例如,这是函数的正确输出(我添加了行返回以提高可读性):
选择一个。。。
食品价值
barValue
市价
为了测试输出,我使用以下断言:
$this->assertRegExp("/(<option value=\".*\" *(selected)? *>.*<\/option>)+/i", $res);
$this->assertRegExp(“/(.*)+/i”,$res);
其中,$res
是测试函数的输出字符串
而且效果很好。但我还要检查选中的是否仅在一个选项中生成
我该怎么做?有没有办法计算所选匹配的次数
提前谢谢,请客气,这是我的第一个问题,所以:-)不要使用正则表达式解析HTML或XML文档。使用DOM解析器:
// create a document object from the HTML string
$doc = new DOMDocument();
$doc->loadHTML($html);
// create a XPath selector
$selector = new DOMXPath($doc);
// select nodes containing the selected attribute
$result = $selector->query('//*[@selected]');
// make assertion
$this->assertEquals(1, $result->length, 'Failed to assert that result contains exactly one selected element');
谢谢,它可以工作,但是除了这个断言之外,我还需要保留当前的断言,以确保选项
标记的格式正确,对吗?我是否可以仅使用DOM解析器执行整个检查(最终在多个断言中)?我必须承认我从来没有使用过这些……通过调用$doc->loadHTML()
已经完成了基本的格式良好的检查。您应该声明该方法不返回false
。当然,您可以自由执行其他检查,如检查选项数量、值和ID…感谢您的帮助!它对我真的很有用!
// create a document object from the HTML string
$doc = new DOMDocument();
$doc->loadHTML($html);
// create a XPath selector
$selector = new DOMXPath($doc);
// select nodes containing the selected attribute
$result = $selector->query('//*[@selected]');
// make assertion
$this->assertEquals(1, $result->length, 'Failed to assert that result contains exactly one selected element');