我使用茉莉節點做單元測試。我做了下面的代碼嘲諷Date.now()間諜上Date.now()導致茉莉節點沒有響應
spyOn(Date, 'now').andReturn(1387636363717); //always return a fixed time
然後我試圖運行jasmine-node spec/
,但它停止,沒有輸出工作。我無法弄清楚是什麼原因。
我使用茉莉節點做單元測試。我做了下面的代碼嘲諷Date.now()間諜上Date.now()導致茉莉節點沒有響應
spyOn(Date, 'now').andReturn(1387636363717); //always return a fixed time
然後我試圖運行jasmine-node spec/
,但它停止,沒有輸出工作。我無法弄清楚是什麼原因。
我已經寫了一個小測試。它工作得很好。在版本1.11.0中使用jasmin-node。
在使用你的Date.now功能呢?
spyOn(Date, 'now').andReturn(1387636363717);
expect(Date.now()).toEqual(1387636363717);
的問題是,有在節點運行時(timers.js
)代碼調用Date.now()
標記的時間的流逝。如果你有一些代碼設置一個計時器(setTimeout
),雖然沒有使用jasmine.Clock
被執行的代碼,那麼你會發現node.js中等待一段時間才能執行下一個真正超時前經過。由於此代碼看起來是從外部javascript土地調用的,因此您無法依賴JavaScript的單線程本質來保證您不受此影響。通過在Date.now
間諜上設置一個斷點.andCallFake
,我能夠看到規範的執行被無限期暫停,等待一毫秒的時間。
這對我來說是一個問題,因爲我們有一個非常大的單元測試套件,並且有可能將setTimeout
稱爲其他調用的副作用,並且jasmine.Clock
在每個規範中都沒有普遍使用。由於這是優化的副作用(注意:註釋中的'開銷太多'),我會認爲這是node.js中的一個錯誤。
如果你想停止時間爲你的測試:
it
功能 - 不beforeEach
)。這樣你的規格不會被延遲(也解釋了爲什麼@ marco.jantke沒有看到這個問題)。jasmine.Clock
。
我的代碼是完全一樣的代碼。我的茉莉花節點版本是1.12.0 – Shuping
我也試過茉莉花節點1.11.0,同樣的問題。操作系統是Ubuntu 12.不知道爲什麼在Date.now上偵測導致jasmine-node無法正常工作。 – Shuping