gpt4 book ai didi

ruby - change(receiver, message) 和 change { block } 之间有区别吗

转载 作者:行者123 更新时间:2023-12-01 01:40:07 26 4
gpt4 key购买 nike

我发现断言方法change以两种不同的方式使用

expect { createRecord.call }.to change(Record, :count).by(1)

对比
expect { createRecord.call }.to change { Record.count }.by(1)

我试图深入研究源代码,发现如果提供了块,将调用传递的块。
没有阻止消息将被“发送”给接收者。

我想知道是否有一些场景应该优先于另一个?

最佳答案

并非一切都如此整齐地映射到 send方法。例如:

expect { createRecord.call }.to change { Record.count(OtherRecord.param) }.by(1)

如果无法将其表示为简单的 send(*args)作为:
expect { createRecord.call }.to change(Record, :count, OtherRecord.param).by(1)

这评估 OtherRecord.paramexpect line 执行,而不是在间隔之前和之后的右侧。

提供它是为了功能完整性并为您提供完全控制。

简而言之,块形式运行精确块两次,而另一个评估参数一次并生成 send打电话两次。

关于ruby - change(receiver, message) 和 change { block } 之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59023666/

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