所以我很确定这会起作用......
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?
方法。是否有一些特殊的方法来做到这一点 from().to()
在RSpec?
这应该工作:
expect { file.send(:on_io) {} }.to change{
file.io
}.from(NilClass).to(File)
rspec将使用 ===
比较中的值 from
和 to
。但 ===
不是可交换的,当在类上调用时,它将检查它的参数是否是类的实例。所以:
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)
我觉得这是最具可读性的。
这应该工作:
expect { file.send(:on_io) {} }.to change{
file.io
}.from(NilClass).to(File)
rspec将使用 ===
比较中的值 from
和 to
。但 ===
不是可交换的,当在类上调用时,它将检查它的参数是否是类的实例。所以:
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)
我觉得这是最具可读性的。