2015-10-03 32 views
17

rspec testlerinde eq ve eql kullanımı arasındaki fark nedir?Rspec `eq` vs` eql` `beklemede 'sınama

it "adds the correct information to entries" do 
    # book = AddressBook.new # => Replaced by line 4 
    book.add_entry('Ada Lovelace', '010.012.1815', '[email protected]') 
    new_entry = book.entries[0] 

    expect(new_entry.name).to eq('Ada Lovelace') 
    expect(new_entry.phone_number).to eq('010.012.1815') 
    expect(new_entry.email).to eq('[email protected]') 
end 

ve:

it "adds the correct information to entries" do 
    # book = AddressBook.new # => Replaced by line 4 
    book.add_entry('Ada Lovelace', '010.012.1815', '[email protected]') 
    new_entry = book.entries[0] 

    expect(new_entry.name).to eql('Ada Lovelace') 
    expect(new_entry.phone_number).to eql('010.012.1815') 
    expect(new_entry.email).to eql('[email protected]') 
end 

cevap

23

karşılaştırıldığında kullanılan eşitlik türüne göre burada ince farklar vardır arasında bir fark var mı. Rpsec Dokümanlar

:

Ruby exposes several different methods for handling equality: 

a.equal?(b) # object identity - a and b refer to the same object 
a.eql?(b) # object equivalence - a and b have the same value 
a == b # object equivalence - a and b have the same value with type conversions] 

eq karşılaştırma için == operatörünü kullanır ve eql tip dönüşümleri göz ardı eder.

+0

Bir tür dönüştürme, aynı nesne türü olarak karşılaştırılan nesnelerin veya nesnelerin aranması anlamına mı geliyor? – austinthesing

+5

@austinthesing, "42.0 == 42", "true" ve "42.0.eql" üretir. 42 'yanlış' üretir. –