使用 sinon 模拟日期对象

Jer*_*emy 3 javascript date sinon

这是我的代码:

var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options);
Run Code Online (Sandbox Code Playgroud)

我需要startTime在我的单元测试中得到它。从 Java 的角度了解单元测试,我将解决这个问题作为如何模拟新的日期构造函数?然后如何模拟 toLocaleTimeString 函数调用?. 但是,我不确定这是在 javascript 中解决这个问题的方法。

我已经尝试了几件事,包括 sinon 的 useFakeTimers,但我认为这无关紧要,因为我实际上对时间的流逝不感兴趣。

这是我的测试代码,现在从大量谷歌搜索中闪现出来,零上下文是关于 sinon 是如何工作的:

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

但是,这会导致错误“尝试将未定义的属性 toLocaleTimeString 包装为函数”。

请帮助我理解我打算如何消除这种功能以及我如何做到这一点背后的逻辑。

Uly*_* BN 7

你想要存根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()
Run Code Online (Sandbox Code Playgroud)

请参阅 runkit 示例。