比较相等的字符串时,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”的字节太多!我查看了模板,果然它使用了×。当我从控制台复制和粘贴时,它一定丢失了原始字符(或 RSpec 在输出前翻译它)。我将规范和模板更改为x

【讨论】:

以上是关于比较相等的字符串时,RSpec 期望失败的主要内容,如果未能解决你的问题,请参考以下文章

RSpec 失败是因为它认为 ActiveRecord 对象不相等

RSpec控制器测试 - 空白响应.body

RSpec 控制器测试 - 空白 response.body

比较 unicode 字符时,Javascript 字符串比较失败

linux shell 比较字符串是不是相等

RSpec:期望更改多个