2012-11-21 39 views
2

假設我有一個測試套件,我通過給describe恆定啓動:有沒有簡單的方法來獲得傳遞給Rspec的`describe`的第一個參數?

describe SomeExcessivelyLong::And::Maybe::Namespaced::Classname do 

    # Convenience reference for tests 
    let(:klass) { SomeExcessivelyLong::And::Maybe::Namespaced::Classname } 

end 

有一個現有的方法,如subject或類似的東西,使這個let(:klass)多餘?如何訪問傳遞給describe的第一個值?

回答

2

通話described_class在你的榜樣這樣:

describe SomeExcessivelyLong::And::Maybe::Namespaced::Classname do 
    it "should do something" do 
    described_class.should be SomeExcessivelyLong::And::Maybe::Namespaced::Classname 
    end 
end 
+0

完美!爲了擴大這個範圍:'describe_class'返回實際的類(不是字符串名),如果'describe'有一個;如果給出一個字符串,比如'describe「SomeClass」','describe_class'返回'nil'。 –

5

默認情況下,subject將是describe塊中類的新實例,因此您應該能夠調用subject.class來獲取類本身。

describe SomeExcessivelyLong::And::Maybe::Namespaced::Classname do 
    it "should do something" do 
    subject.class.should be_a SomeExcessivelyLong::And::Maybe::Namespaced::Classname 
    end 
end 
+0

尼斯。然而,缺點是你必須先獲得一個新的實例才能返回到課堂。在我的例子中,被描述的類需要'initialize'方法的參數,所以自己調用'subject'的參數數量是錯誤的。 –

+0

是。必須有一種方法來實現它,也許如果你深入瞭解「主題」內容的來源,它將變得明顯...... –

相關問題