rspec和nil和be_nil有什么区别

我正在使用rspec和断言之类的

student.name should be nil student.name should be_nil 

两者似乎都有效。 使用be nilbe_nil有什么区别???

实际上没有区别,除了be nil得到动态定义, be_nil已经由rspec专门编程。

当你说should.be something ,rspec尝试以下

  [:==, :<, :<=, :>=, :>, :===].each do |operator| define_method operator do |operand| BeComparedTo.new(operand, operator) end end 

然而,当你尝试should.be_nil它只是检查

 object.nil? 

https://github.com/rspec/rspec-expectations/blob/master/lib/rspec/matchers/built_in/be.rb

我认为没有区别,但它用于与be_truebe_false等其他方法保持一致。

在引擎盖be检查两个元素的id

  • 适用于nil

  • 失败了,因为在Ruby中,一切都不是false也不是nil

  • 由于nilfalse匹配,因此失败