如何使用 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&nbsp;! Tranquille&nbsp;! Excellent&nbsp;!</div>

(是法语,所以需要在感叹号前面加&amp;nbsp;硬空格。)

我想到了一个同样简单的测试,例如

        $this->assertSelectorTextContains('div', 'Simple&nbsp;! Tranquille&nbsp;! Excellent&nbsp;!');

会成功,但我失败了。

进一步调查表明

        $texte = $crawler->filter("div")->first();
        $this->assertEquals($texte->text(), "Simple&nbsp;! Tranquille&nbsp;! Excellent&nbsp;!");

返回

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Simple ! Tranquille ! Excellent !'
+'Simple&nbsp;! Tranquille&nbsp;! Excellent&nbsp;!'

那么,我如何帮助assertSelectorTextContains()(更一般地说,PHPUnit)了解两个字符串实际上是相同的? (或者至少是等价的?)

【问题讨论】:

仅供参考:IIRC assertSelectorTextContains 断言来自 Symfony(不是 Phpunit),正如您已经发现的那样,文本没有 html 实体。文本的编码可能是 UTF-8。 【参考方案1】:

更改我的搜索条件得到了答案,html_entity_decode()

        $this->assertSelectorTextContains('div', html_entity_decode('Simple&nbsp;! Tranquille&nbsp;! Excellent&nbsp;!'));

完成这项工作。

【讨论】:

您也可以尝试使用双引号字符串和 unicode 代码点转义语法:"Simple\uA0! ..."php.net/manual/en/…

以上是关于如何使用 PHPUnit 测试 Symfony 中的字符引用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHPUnit 测试 Symfony 中的字符引用?

Symfony:如何正确地从phpunit / phpunit切换到phpunit桥

Symfony 3模拟服务功能测试phpunit和liip

Symfony PHPUnit 测试不验证用户

如何在Symfony 4中为测试环境设置数据库

Symfony Doctrine 关系在 PhpUnit 测试中为空