2012-06-01 5 views

Trả lời

14

Không có sự khác biệt thực sự, trừ be nil được định nghĩa một cách nhanh chóng, và be_nil đã được lập trình đặc biệt bởi rspec.

khi bạn nói should.be something, rspec cố gắng sau

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

Trong khi đó, khi bạn cố gắng should.be_nil nó chỉ kiểm tra

object.nil? 

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

2

Tôi nghĩ rằng không có sự khác biệt nhưng nó được sử dụng cho sự nhất quán với các phương pháp khác như be_true hoặc be_false.

Dưới mui xe be kiểm tra các id của cả hai yếu tố:

  • làm việc với nil

  • không thành công với true vì trong Ruby tất cả mọi thứ không false cũng không niltrue

  • không thành công với false kể từ cả hai nilfalse trận đấu