15

我正在使用 rspec 并用于断言

student.name should be nil
student.name should be_nil

两者似乎都有效。be nil使用be_nil???有区别吗?

4

2 回答 2

21

真的没有什么区别,除了be nil动态定义,并且be_nil由 rspec 专门编程。

当你说should.be somethingrspec 尝试以下

   [:==, :<, :<=, :>=, :>, :===].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

于 2012-06-01T21:04:33.003 回答
4

我认为没有区别,但它用于与其他方法(如be_trueor )保持一致be_false

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

  • nil

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

  • 失败,false因为两者nilfalse匹配

于 2012-06-01T20:32:26.117 回答