rspec和nil和be_nil有什么区别
我正在使用rspec和断言之类的
student.name should be nil student.name should be_nil
两者似乎都有效。 使用be nil
和be_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_true
或be_false
等其他方法保持一致。
在引擎盖be
检查两个元素的id
:
-
适用于
nil
-
失败了,因为在Ruby中,一切都不是
false
也不是nil
-
由于
nil
和false
匹配,因此失败