如何在 RSpec 中检查从 Nil 的更改

  • 本文关键字:Nil RSpec ruby rspec null
  • 更新时间 :
  • 英文 :


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

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)

我认为这是最具可读性的。

相关内容

  • 没有找到相关文章

最新更新