gpt4 book ai didi

ruby - 如何比较 RSpec 中的两个哈希值?

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:11 25 4
gpt4 key购买 nike

我有两个散列 h1h2 我想在 RSpec 中进行比较。

我想检查 h1 的元素在一些转换后是否与 h2 相同,我们称之为 f。也就是说,我想验证对于 h1 中的每个键 kh1[k] == f(h2[k])

例如,如果 h2 中的所有值都是 h1 中相应值的两倍,那么我想检查每个键 k 在 h1 中,h2[k] == h1[k] * 2

在 RSpec 中执行此操作的正确方法是什么?目前我这样做:

h1 = ...
expect(
h2.all? { |k,v|
v == f(h1[k])
}
).to be true

但这看起来很笨重。

最佳答案

听起来您正在测试的是转换。我会考虑写这样的东西:

it "transforming something does something" do
base_data = { k1: 1, k2: 2 }
transformed_data = base_data.each_with_object({}) { |(k, v), t|
t[k] = f(v)
}

expect(transformed_data).to eq(
k1: 2,
k2: 4,
)
end

对我来说,描述清楚地说明了我们的期望。然后我可以很容易地从测试中看到输入是什么以及预期的输出。此外,这利用了哈希匹配器,它将在失败时提供两个哈希的很好的差异:

expected: {:k1=>2, :k2=>4}
got: {:k1=>1, :k2=>4}

(compared using ==)

Diff:
@@ -1,3 +1,3 @@
-:k1 => 2,
+:k1 => 1,
:k2 => 4,

虽然我会质疑键值关系的含义。这些只是您尝试运行的测试用例吗?如果是这样,我只会对每个进行独特的测试。如果还有更多内容,那么我可能会质疑为什么没有为 transform 方法提供开始的哈希值。

关于ruby - 如何比较 RSpec 中的两个哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com