Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用sinon模拟日期对象_Javascript_Date_Sinon - Fatal编程技术网

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');

工作起来很有魅力。我花了很长时间在这上面,所以非常感谢你。