В RSpec, каково различие между использованием should == ...
и should eql(...)
? Я заметил, что документация RSpec всегда использует eql
, но ==
меньше вводит и легче читать. Что я пропускаю?
На самом деле все довольно просто: should ==
посылает сообщение ==
испытуемому, should eql
посылает сообщение eql?
испытуемому. Другими словами, два разных теста посылают два совершенно разных сообщения, которые вызывают два совершенно разных метода и, таким образом, делают две совершенно разные вещи. В частности, eql?
является более строгим, чем ==
, но менее строгим, чем equals?
.
Обычно они эквивалентны, но не всегда:
1 == 1.0 # => true
1.eql? 1.0 # => false