2012-06-01 5 views

ответ

14

Там нет никакой разницы на самом деле, за исключением 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

2

Я думаю, что нет никакой разницы, но он используется для согласованности с другими методами, такими как be_true или be_false.

Под капотом be проверок id обоих элементов:

  • работ с nil

  • терпит неудачу с true, потому что в Ruby, все, что не false ни nil является true

  • терпит неудачу с false, так как оба nil и false матч

Смежные вопросы