如何使用 PHPUnit 测试 Symfony 中的字符引用?
Posted
技术标签:
【中文标题】如何使用 PHPUnit 测试 Symfony 中的字符引用?【英文标题】:How to test for character references in Symfony with PHPUnit? 【发布时间】:2021-09-10 01:20:03 【问题描述】:我想测试这个由我的 php/Symfony 项目生成的非常简单的页面
<div>Simple ! Tranquille ! Excellent !</div>
(是法语,所以需要在感叹号前面加&nbsp;
硬空格。)
我想到了一个同样简单的测试,例如
$this->assertSelectorTextContains('div', 'Simple ! Tranquille ! Excellent !');
会成功,但我失败了。
进一步调查表明
$texte = $crawler->filter("div")->first();
$this->assertEquals($texte->text(), "Simple ! Tranquille ! Excellent !");
返回
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Simple ! Tranquille ! Excellent !'
+'Simple ! Tranquille ! Excellent !'
那么,我如何帮助assertSelectorTextContains()
(更一般地说,PHPUnit)了解两个字符串实际上是相同的? (或者至少是等价的?)
【问题讨论】:
仅供参考:IIRC assertSelectorTextContains 断言来自 Symfony(不是 Phpunit),正如您已经发现的那样,文本没有 html 实体。文本的编码可能是 UTF-8。 【参考方案1】:更改我的搜索条件得到了答案,html_entity_decode()
:
$this->assertSelectorTextContains('div', html_entity_decode('Simple ! Tranquille ! Excellent !'));
完成这项工作。
【讨论】:
您也可以尝试使用双引号字符串和 unicode 代码点转义语法:"Simple\uA0! ..."
php.net/manual/en/…以上是关于如何使用 PHPUnit 测试 Symfony 中的字符引用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHPUnit 测试 Symfony 中的字符引用?