2017-08-16 80 views
1

這裏是我的代碼:使用興農嘲笑約會對象

var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options); 

我需要得到startTime在我的單元測試。從java的角度瞭解單元測試,我會將此問題作爲如何模擬新的日期構造函數?然後如何模擬toLocaleTimeString函數調用?。但是,我不確定這是在javascript中處理這個問題的方法。

我已經嘗試過幾個東西,包括sinon的useFakeTimers,但我不認爲這是相關的,因爲我對時間的流逝沒有真正的興趣。

這裏是我的測試代碼,現在從很多着如何興農工作的零背景谷歌搜索的閃閃發光:

var whatever = sinon.spy(global, 'Date'); 
sinon.stub(whatever, 'toLocaleTimeString').yields('7:00 PM'); 

然而,這給出了錯誤「試圖包未定義的屬性toLocaleTimeString的功能」。

請幫助我理解背後的邏輯是如何將這種功能和我如何做到的。

回答

1

你想存根Date的原型,所以當你創建一個新的Date它會來與存根:

const stub = sinon.stub(Date.prototype, 'toLocaleTimeString').returns('7:00 PM') 
new Date().toLocaleTimeString("en-US") 
stub.restore() // or Date.prototype.toLocaleTimeString.restore() 

See the runkit example.

+0

就像一個魅力。我花了很長時間在此,所以非常感謝你。 – Jeremy