gpt4 book ai didi

ruby - 如何检查 RSpec 中 Nil 的变化

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

所以我很确定这会起作用...

expect { file.send(:on_io) {} }.to change{
file.io.class
}.from( NilClass ).to( File )

但它失败并显示此消息...

result should have initially been NilClass, but was NilClass

胡?

首先,为什么返回失败?其次,我知道通常您可以使用 nil? 方法使用 be_nil 检查 nil。是否有一些特殊的方法可以使用 RSpec 中的 from().to() 执行此操作?

最佳答案

这应该有效:

expect { file.send(:on_io) {} }.to change{
file.io
}.from(NilClass).to(File)

rspec 将使用 === 来比较 fromto 中的值。但是 === 是不可交换的,当在一个类上调用时,它会检查它的参数是否是该类的一个实例。所以:

NilClass === NilClass
#=> false

因为 NilClass 不是 NilClass 的实例。另一方面,

NilClass === nil
#=> true
nil === nil
#=> true
nil === NilClass
#=> false

因为nil是NilClass的实例,nil等于nil,但nil不等于NilClass。

你也可以这样写你的测试:

expect { file.send(:on_io) {} }.to change{
file.io
}.from(nil).to(File)

我认为这是最可读的。

关于ruby - 如何检查 RSpec 中 Nil 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654614/

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