为什么eql在RSpec规范中比eql更常见?在正常的代码?

时间:2015-11-04 06:06:43

标签: ruby rspec equality

在许多使用RSpec的Ruby或Ruby on Rails项目中,eql在spec文件中经常使用,但eql?很少在spec文件之外使用,而==很少使用在spec文件中,但经常在spec文件之外。

例如,查看狂欢项目:

spree agrimm$ git grep eql **/spec/**/* | wc
     135     589   14976
spree agrimm$ git grep eql | wc
     138     600   15274
spree agrimm$ git grep '==' **/spec/**/* | wc
      56     413    5764
spree agrimm$ git grep '==' | wc
    1165   11857  297297

我理解==eql?之间的difference in functionality。但是为什么人们经常选择在RSpec中使用eql(对应于eql?的匹配器)(例如expect(a).to eql(b))而不是==(例如{{} 1}})?

2 个答案:

答案 0 :(得分:0)

这只是猜测,而不是明确的知识。其他人可能肯定知道。

# Tests whether a == b
expect(a).to be == b

看起来不如

# Tests whether a.eql?(b)
expect(a).to eql(b)

但有些用户并不知道您可以使用eq来提供

# Tests whether a == b
expect(a).to eq(b)

Spree项目经常使用eq

spree agrimm$ git grep eq **/spec/**/* | wc
    2930   11694  320369

答案 1 :(得分:0)

==在当前RSpec文件中很少发生,因为首选==语法不支持expect匹配器。它经常出现在实现文件中,因为它是更自然的语法。

同样,eql(和eq)经常出现在RSpec中,因为它们分别是eql?==的匹配器。生产中几乎没有必要,因为==占主导地位。