Javascript 使用sinon模拟日期对象
这是我的密码:Javascript 使用sinon模拟日期对象,javascript,date,sinon,Javascript,Date,Sinon,这是我的密码: var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options); 我需要在单元测试中获得startTime。从java的角度了解单元测试,我将把这个问题作为如何模拟新的日期构造函数来处理?那么我如何模拟toLocaleTimeString函数调用呢?。然而,我不确定这是否是javascript解决这个问题的方法 我尝试过几件事,包括sinon的useFakeTimers,但我认为这并不重要
var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options);
我需要在单元测试中获得startTime
。从java的角度了解单元测试,我将把这个问题作为如何模拟新的日期构造函数来处理?那么我如何模拟toLocaleTimeString函数调用呢?。然而,我不确定这是否是javascript解决这个问题的方法
我尝试过几件事,包括sinon的useFakeTimers,但我认为这并不重要,因为我实际上对时间的流逝不感兴趣
下面是我的测试代码,它是从大量Google搜索中获得的,没有关于sinon如何工作的上下文:
var whatever = sinon.spy(global, 'Date');
sinon.stub(whatever, 'toLocaleTimeString').yields('7:00 PM');
但是,这会导致错误“试图将未定义的属性包装为函数toLocaleTimeString”
请帮助我理解我是如何删除这类功能的逻辑以及我是如何做到的。您想要删除
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()
很多例子中没有一个对我有效(stubing、useFakeTimers)。把它添加到我的测试套件中去了
Date.prototype.toLocaleTimeString = sinon
.stub()
.callsFake(() => '7:00 PM');
工作起来很有魅力。我花了很长时间在这上面,所以非常感谢你。