比较相等的字符串时,RSpec 期望失败
Posted
技术标签:
【中文标题】比较相等的字符串时,RSpec 期望失败【英文标题】:RSpec expect is failing while comparing equal strings 【发布时间】:2021-12-21 12:38:41 【问题描述】:我尝试更新此测试,但它无法比较相同的字符串,即使我将“got”输出复制并粘贴回测试用例。为什么这个 RSpec 测试失败了?
Failure/Error: expect(first_item_cost).to eq("12 x $499 = $5,988")
expected: "12 x $499 = $5,988"
got: "12 x $499 = $5,988"
(compared using ==)
代码:
first_item_cost = find('.cart-item-cost', match: :first).text
expect(first_item_cost).to eq("12 x $499 = $5,988")
RSpec 3.9
【问题讨论】:
我尝试更新到RSpec 3.10
,但没有帮助。
它们可能看起来相同,但实际上可能不同。检查first_item_cost.encoding
,然后比较两个字符串<str>.bytes
。我猜那里可能有一些特殊字符。
【参考方案1】:
我检查了编码和字节,发现:
puts "Encoding: " + first_item_cost.encoding.to_s
puts "Bytes: " + first_item_cost.bytes.to_s
输出:
Encoding: UTF-8
Bytes: [49, 50, 32, 195, 151, 32, 36, 52, 57, 57, 32, 61, 32, 36, 53, 44, 57, 56, 56]
“x”的字节太多!我查看了模板,果然它使用了&times;
。当我从控制台复制和粘贴时,它一定丢失了原始字符(或 RSpec 在输出前翻译它)。我将规范和模板更改为x
。
【讨论】:
以上是关于比较相等的字符串时,RSpec 期望失败的主要内容,如果未能解决你的问题,请参考以下文章
RSpec 失败是因为它认为 ActiveRecord 对象不相等
RSpec 控制器测试 - 空白 response.body