【问题标题】:How to test for character references in Symfony with PHPUnit?如何使用 PHPUnit 测试 Symfony 中的字符引用?
【发布时间】: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。

标签: php symfony phpunit character-reference


【解决方案1】:

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

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

完成这项工作。

【讨论】:

  • 您也可以尝试使用双引号字符串和 unicode 代码点转义语法:"Simple\u{A0}! ..."php.net/manual/en/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2023-02-05
  • 2021-12-02
  • 2015-04-26
相关资源
最近更新 更多