如何创建一个代码接受断言来查看版权符号?
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('© 2016 MyCompany, LLC');
更新:我检查了编辑历史,您似乎在原始问题中使用了实际的 © 字符。
我做了一个快速测试,$I->see('© 2016 MyCompany, LLC')
匹配 © 和 ©
,所以它应该适合你。确保您的测试文件保存为 UTF-8,并且您的网站使用的是 UTF-8。
如果您使用不同的字符集,请在断言中使用字符代码。
我正在尝试创建一个验收测试,它会查找一行也包含版权符号 (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('© 2016 MyCompany, LLC');
更新:我检查了编辑历史,您似乎在原始问题中使用了实际的 © 字符。
我做了一个快速测试,$I->see('© 2016 MyCompany, LLC')
匹配 © 和 ©
,所以它应该适合你。确保您的测试文件保存为 UTF-8,并且您的网站使用的是 UTF-8。
如果您使用不同的字符集,请在断言中使用字符代码。