如何创建一个代码接受断言来查看版权符号?

How would one create a codeception assertion to see a copyright symbol?

我正在尝试创建一个验收测试,它会查找一行也包含版权符号 (c) 的文本。我试过使用:

$I->see('© 2016 MyCompany, LLC');

在断言中使用 html 转义字符失败。有什么技巧可以让密码被看到版权符号吗?

版权符号不会出现在大多数多字节编码共享的 ASCII 的 7 位安全子集中​​,因此将由不同的字节序列表示,具体取决于所使用的编码。您需要确定您的预期输出将采用何种编码,然后调整您的断言字符串以匹配。

对于 UTF-8:

$I->see('\xc2\xa9 2016 MyCompany, LLC');  // PHP<7
$I->see('\u{a9} 2016 MyCompany, LLC');    // PHP>=7

对于 ISO-8859-1:

$I->see('\xa9 2016 MyCompany, LLC');

此外,使用像这样的文字字节序列可以帮助您避免 copy/pasting 使用不同编码的程序之间的数据问题。在 ISO-8859-1 中看起来有效的内容在您将其粘贴到 UTF-8 文档中时会变得完全乏味,反之亦然。

注意: 版权符号出现在 UTF-8 序列 [U+80 到 U+BF] 的狭窄 window 中,其中 Extended-ASCII/Windows-1252/ISO-8859-1单字节表示匹配双字节 UTF-8 序列的第二个字节。这是因为 UTF-8 保留了 "trailing bytes" 的前两位,它们始终为 10,这使得第一个半字节为 10XX,因此为 0x80 到 0xBF。

我觉得有必要添加这个,因为我最近在试图解释他们的编码不匹配时与某人就 "garbage byte" 进行了一场旷日持久的争论。有关 UTF-8 编码的详细信息,请参阅 this article

see 方法匹配已解码的 html 实体,因此您必须按照 Sammitch 的建议使用实际字符。

替代方法是使用 seeInSource 方法并匹配 HTML:

中的实体

$I->seeInSource('&copy; 2016 MyCompany, LLC');

更新:我检查了编辑历史,您似乎在原始问题中使用了实际的 © 字符。

我做了一个快速测试,$I->see('© 2016 MyCompany, LLC') 匹配 © 和 &copy;,所以它应该适合你。确保您的测试文件保存为 UTF-8,并且您的网站使用的是 UTF-8。 如果您使用不同的字符集,请在断言中使用字符代码。