2012-06-01 9 views

risposta

14

Non c'è differenza in realtà, tranne be nil ottiene definito al volo, e be_nil è stato specificamente programmato da RSpec.

quando dici should.be something, RSpec tenta il seguente

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

considerando che, quando si tenta should.be_nil controlla solo

object.nil? 

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

2

Penso che non ci siano differenze ma è utilizzato per coerenza con altri metodi come be_true o be_false.

Sotto il cofano be controlli la id di entrambi gli elementi:

  • opere con nil

  • fallisce con true perché in Ruby non tutto falsenil è true

  • fallisce con false poiché entrambi nil e false partita

Problemi correlati