我正在使用jasmine-node进行单元测试。我在下面的代码中做了模拟Date.now()
spyOn(Date, 'now').andReturn(1387636363717); //always return a fixed time
然后我尝试运行jasmine-node spec/
但它没有输出就停止了工作。我无法弄清楚是什么原因。
答案 0 :(得分:5)
我写过一个很小的测试。它工作得很好。在1.11.0版中使用jasmin-node。
然后使用Date.now函数在哪里?
spyOn(Date, 'now').andReturn(1387636363717);
expect(Date.now()).toEqual(1387636363717);
答案 1 :(得分:0)
问题是节点运行时(timers.js
)中有代码调用Date.now()
来标记时间的流逝。如果您有设置计时器(setTimeout
)的代码并且在不使用jasmine.Clock
时执行该代码,那么您可能会发现node.js在执行下一个之前等待一段时间真正的超时。由于此代码似乎是从外部javascript域调用的,因此您无法依赖
关于javascript的单线程性质,以保证您的安全。通过在.andCallFake
间谍的Date.now
上放置一个断点,我能够看到规范的执行被无限期暂停,等待毫秒才能通过。
这对我来说是一个问题,因为我们有一个非常大的单元测试套件,并且有可能setTimeout
被调用作为其他一些调用的副作用,并且jasmine.Clock
并非普遍使用规范。由于这是优化的副作用(注意:评论中的'开销太大'),我认为这是node.js中的错误。
如果您想停止测试时间:
it
函数 - 而不是beforeEach
)。这样你的规范就不会延迟(也解释了为什么@ marco.jantke没有看到这个问题)。jasmine.Clock
。