2016-07-15 103 views
2

我阅读spies,我不能看到这之间的差异德:这个double和spy有什么区别?

RSpec.describe "have_received" do 
    it "passes when the message has been received" do 
    invitation = spy('invitation', deliver: "ok") 
    invitation.deliver 
    expect(invitation).to have_received(:deliver) 
    end 
end 

和:

RSpec.describe "have_received" do 
    it "passes when the message has been received" do 
    invitation = double('invitation', deliver: "ok") 
    invitation.deliver 
    expect(invitation).to have_received(:deliver) 
    end 
end 

两个例子都通过没有问题。我看不出任何优势使用spy

+1

我还没有试过这个,可能是错误的,但我怀疑在间谍的例子中,你可以调用'invitation = spy('invitation')'并且能够调用'.deliver'而不用说'递送:“确定”。 –

回答

0

正如@max在评论中所说,区别在于我可以使用spy而不用说deliver: "ok"。所以,运行这个:

RSpec.describe "have_received" do 
    it "passes when the message has been received" do 
    invitation = spy('invitation') 
    invitation.deliver 
    expect(invitation).to have_received(:deliver) 
    end 
end 

RSpec.describe "have_received" do 
    it "passes when the message has been received" do 
    invitation = double('invitation') 
    invitation.deliver 
    expect(invitation).to have_received(:deliver) 
    end 
end 

第一个例子会通过,但不是第二个。

enter image description here

现在我明白这是什么意思?

“你可以使用任何测试双(或部分双)作为间谍,但双必须设置刺探消息你关心的是间谍自动监视所有消息,或者你可以允许一条消息窥探它。“