2015-09-23 38 views
1

raise_error是支持塊預期的匹配器。我可以在塊匹配器中使用is_expected嗎?

下面我有一個規範的檢測,該方法foo引發錯誤:

require 'rspec' 
def foo 
    raise StandardError 
end 

describe 'foo' do 
    subject{ foo } 
    specify{ expect{ subject }.to raise_error } 
    it{ is_expected.to raise_error } 
end 

現在,specify{ expect{ foo }.to raise_error }傳球符合市場預期,但it{ is_expected.to raise_error }失敗。它失敗了,因爲StandardError被提出並且沒有被匹配器raise_error救出。

所以我可以使用is_expected的塊嗎?還是我註定要一次又一次地寫specify{ expect{ subject }?請問RSpec未來會支持與is_expected一起使用嗎?

回答

1

the documentation, is_expected只是等於expect(subject)。您得到的StandardError正在通過subject參數的評估值提升至is_expected。匹配器從不被調用。

由於is_expected隱含在subject上運行,所以is_expected沒有意義。但是,如果subject被定義爲一個ProcLambda,那麼它不只是你所期望它做的事,如下列:

describe 'foo' do 
    subject{ Proc.new { foo } } 
    specify{ expect{ subject.call }.to raise_error } 
    it{ is_expected.to raise_error } 
end 
相關問題