2014-03-28 57 views
0

我刚开始用RSpec和Rails进入TDD,我发现如果我测试的方法应该是真的,测试将工作,如果我使用期望(方法),而不是期望(方法).to be_true。Rspec expect(method)vs expect(method).to be_true

it "is true" do 
    expect(subject).to be_true 
    #Works the same as... 
    expect(subject) 
end 

是否有任何理由不使用期望没有.to,它会打破测试或不捕捉某些失败?就是想。

+0

它们是一样的。 –

回答

1

你没有达到你的想象。 expect(false)不会失败。 expect(true)只有成功,因为没有任何测试。 例如如果您有以下内容的规范:

describe "something" do 
    it "does something" do 
    false 
    puts expect(false) 
    # anything that evaluates to false 
    end 
end 

你会得到这样的事情,当你运行RSpec的:

#<RSpec::Expectations::ExpectationTarget:0x007ff0b35a28b8\> 
. 

Finished in 0.00061 seconds 
1 example, 0 failures 

基本上你不主张任何东西,expect(subject)评估为ExpectationTarget。

+0

这是正确的。谢谢。 –

0

我认为后者的工作是巧合。

每一个expect语句都会以某种方式评估真或假。

例如

arr = ['a', 'b', 'c'] 
expect(arr).to include('a') 

会因为arr包括'a'返回true。

所以你的情况expect(subject)expect(subject).to be_true有点等同于以下:

bool = true 
if bool 
    # Do something here 

if bool == true 
    # Do something here 

为了使长话短说,没关系,但我宁愿expect(subject).to be_true为了提高可读性。