rspec与nil和be_nil有什么区别

时间:2012-06-01 20:23:02

标签: ruby-on-rails rspec2

我正在使用rspec和类似

的断言
student.name should be nil
student.name should be_nil

两者似乎都有效。使用be nilbe_nil ???

之间有区别吗?

2 个答案:

答案 0 :(得分:16)

除了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

答案 1 :(得分:3)

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

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

  • 适用于nil

  • true而失败,因为在Ruby中,falsenil的所有内容都不是true

  • 由于falsenil匹配,
  • false失败