2016-01-20 20 views
0

根據rails 4.2.4rspec 3.4的升級,我正在修復大型應用中的規格。以前的開發者使用subject.invoke,但現在看起來不起作用。什麼是subject.invoke以及我如何替代它?什麼是rspec中的subject.invoke?

回答

0

subjectsubject塊在當前上下文中的返回值。如果你有這樣的

subject { Foo.new } 

塊然後subject呼叫的例子將返回新Foo實例。

以下invoke只是撥打電話invokesubject。因此它取決於主題的實施。

1

由於某個特定原因,這個問題很難回答這個問題 - subject可以是任何東西,它在您的測試中定義。

subject有兩種方式可以定義 - 隱式或顯式。含蓄,它使用在最頂部describe的一類,因此,如果您有:

describe MyClass do 
    it 'works' do 
    subject 
    end 
end 

subject將執行MyClass.new,將緩存結果所以每次受到後續調用將返回相同的對象。

您可以使用顯式定義subject覆蓋缺省主題:

describe MyClass do 
    subject { described_class.new some: "extra-params" } 
    it 'works' do 
    subject 
    end 
end 

所以,subject.invoke是笑話執行invoke方法上的任何對象的主題是。你將需要找出你的subject是什麼,並找到它的類達到的定義invoke

+0

非常感謝你! –