Node.js Spy on Date.now()导致jasmine节点没有响应

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节点进行单元测试。我为mocking Date.now()编写了以下代码


然后我尝试运行
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。 如果要停止测试时间,请执行以下操作:

  • 监视日期。现在在您的spec函数中(
    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);