2017-08-16 60 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