Rspec比较:eq,match,be,==之间的差异?

时间:2012-12-15 15:17:51

标签: rspec

开始使用黄瓜的rspec断言,我对使用字符串比较的方法存有疑问。我尝试了以下4种方法,所有这些方法似乎产生了相同的结果,所以我想知道其中一种方法是否比其他方法更好?

并且,解释4种方法之间的区别是否容易?也许举个例子?

page.first('div#navigation a').text.should == 'Radio')
page.first('div#navigation a').text.should eq('Radio')
page.first('div#navigation a').text.should match('Radio')
page.first('div#navigation a').text.should (be 'Radio')

非常感谢!!

1 个答案:

答案 0 :(得分:6)

对于您正在进行的字符串比较,==eq(be .)基本相同。

match是模式匹配并且会匹配部分,所以会匹配bRadiosity,如果这是a锚标记中的整个文本

,那么其他方法就不会这样。

e.g。

1.9.3-p194 :001 > a="text with radio"
 => "text with radio" 
1.9.3-p194 :002 > a.=='radio'
 => false 

1.9.3-p194 :013 > b="radioz"
 => "radioz" 
1.9.3-p194 :014 > b.=="radio"
 => false 
1.9.3-p194 :015 > b.match "radio"
 => #<MatchData "radio"> 

注意:

== is ruby (which also has .eql? available though not shown here).
.eq is an rspec helper as is the (be .) construct

就个人而言,我最喜欢==进行字符串比较。其他人更喜欢.eql,因为它与=的区别更多(更突出,更少混淆)。我可能更喜欢==,因为它在各种语言中更容易移植。