2012-06-01 16 views

Respuesta

14

No hay ninguna diferencia realmente, excepto be nil consigue definido sobre la marcha, y be_nil ha sido programado específicamente por rspec.

cuando dice should.be something, rspec trata el siguiente

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

Considerando que, cuando intenta should.be_nil sólo chequea

object.nil? 

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

2

Creo que no hay diferencia, pero se utiliza para la coherencia con otros métodos como be_true o be_false.

bajo el capó be comprueba el id de ambos elementos:

  • obras con nil

  • falla con true porque en Ruby no todo false ni nil es true

  • falla con false ya que ambos nil y false partido

Cuestiones relacionadas