2015-10-13 35 views
0

我正在使用TimeCop Gem來測試對時間敏感的測試用例。 lib目錄中有一個文件。它只包含字符串常量。Timecop無法正確模擬日期

例子。

module DateStr 
    SAMPLE = "Some date #{Date.current}" 
end 

在我的黃瓜測試案例中,這部分代碼沒有得到模擬時間。它選擇系統時間。這是爲什麼?

回答

1

當加載DateStr時,將創建SAMPLE常數並指定存在的日期。

我想說這是常量的錯誤用例,因爲它們不應該改變。

編輯。

我不會爲此行爲使用常量。一個的hackish方式是使用lambda表達式:

module DateStr 
    SAMPLE = -> {"Some date #{Date.current}"} 
end 
DateStr::SAMPLE.call # This will evaluate to current date 

但是,這不是一個很好用的情況下,由於價值不不斷它的自我,而不是爲這種行爲,你應該使用一個簡單的類方法:

module DateStr 
    def self.sample 
    "Some date #{Date.current}" 
    end 
end 
+0

噢耶..我失去了我的想法。哈哈。 –

+0

但是我無論如何都不能嘲笑它。模塊負載將始終發生在TimeCop mocks Date之前。這裏有什麼建議嗎? –

+0

@AjinkyaPisal編輯答案。 – Magnuss