2016-09-27 63 views
2

它說,在 「RSpec Core 3.5」:rpsec的「讓」如何使用記憶?

使用let定義memoized helper方法

我不覺得他們的榜樣是很清楚。他們是否說:count的表達式僅針對一個規範進行一次評估,並且在每個規範之間再次進行評估?

我特別感興趣的是瞭解如何使用let記憶與ActiveRecord對象一起工作。

+0

歡迎來到Stack Overflow。請閱讀「[問]」,特別是「[如何以智能方式提出問題](http://catb.org/esr/faqs/smart-questions.html)」。語法對Stack Overflow很重要。我們正在創建參考書,因此請儘量使用拼寫檢查和正確的格式。 –

回答

4

他們是否說過:count的表達式只針對一個規範評估一次 ,並且在每個規範之間再次評估一次?從docs

答案:

值將跨越多個呼叫跨越例子被緩存在相同的例子,但 沒有。

所以是的,它會被評估一次每個例子。

換句話說,該值將根據it塊評估一次。

我發現他們爲榜樣的超級表現,請看:

$count = 0 
RSpec.describe "let" do 
    let(:count) { $count += 1 } 

    # count will not change no matter how many times we reference it in this it block 
    it "memoizes the value" do 
    expect(count).to eq(1) # evaluated (set to 1) 
    expect(count).to eq(1) # did not change (still 1) 
    end 

    # count will be set to 2 and remain 2 untill the end of the block 
    it "is not cached across examples" do 
    expect(count).to eq(2) # evaluated in new it block 
    end 
end 

我們memoizes the value例如引用count的兩倍,但它是隻計算一次。