Node.js Spy on Date.now()导致jasmine节点没有响应
我正在使用jasmine节点进行单元测试。我为mocking Date.now()编写了以下代码Node.js Spy on Date.now()导致jasmine节点没有响应,node.js,unit-testing,mocking,jasmine,jasmine-node,Node.js,Unit Testing,Mocking,Jasmine,Jasmine Node,我正在使用jasmine节点进行单元测试。我为mocking Date.now()编写了以下代码 然后我尝试运行jasmine节点规范/,但它停止工作,没有输出。我想不出原因是什么。我写了一个小测试。它很好用。在版本1.11.0中使用jasmin节点 你的Date.now函数在哪里 spyOn(Date, 'now').andReturn(1387636363717); expect(Date.now()).toEqual(1387636363717); 问题在于节点运行时(timers.js
然后我尝试运行
jasmine节点规范/
,但它停止工作,没有输出。我想不出原因是什么。我写了一个小测试。它很好用。在版本1.11.0中使用jasmin节点
你的Date.now函数在哪里
spyOn(Date, 'now').andReturn(1387636363717);
expect(Date.now()).toEqual(1387636363717);
问题在于节点运行时(
timers.js
)中有代码调用Date.now()
来标记时间的流逝。如果您有设置计时器的代码(setTimeout
),并且该代码是在不使用jasmine.Clock
的情况下执行的,那么您可能会发现node.js在执行下一个实际超时之前等待了一段时间。因为这段代码似乎是从javascript领域之外调用的,所以您不能依赖它
基于javascript的单线程特性,您可以安全地避免这种情况。通过在上设置断点,并在日期调用fake
。现在
spy,我可以看到规范的执行被无限期地暂停,等待毫秒过去
这对我来说是个问题,因为我们有一个非常大的单元测试套件,setTimeout
可能被称为其他调用的副作用,jasmine.Clock
并没有在每个规范中普遍使用。因为这是优化的副作用(注意:注释中的“开销太大”),我认为这是No.js.</P>中的一个bug。
如果要停止测试时间,请执行以下操作:
it
function-而不是beforeach
)。这样您的规范就不会被延迟(也解释了@marco.jantke没有看到这个问题的原因)jasmine.Clock
我的代码与你的代码完全相同。我的jasmine节点版本是1.12.0,我也尝试过jasmine节点1.11.0,同样的问题。操作系统是Ubuntu12。不知道为什么监视Date.now会导致jasmine节点不工作。
spyOn(Date, 'now').andReturn(1387636363717);
expect(Date.now()).toEqual(1387636363717);