我的Rails應用程序包含一個JavaScript模式,用戶在點擊鏈接後會彈出45秒。結果,我的驗收測試在沒有延遲的情況下通過了,但是失敗了。如何將JavaScript延遲存儲在水豚驗收測試中?
我最初嘗試在我的水豚驗收測試中使用Timecop gem來快進時間,但那並不奏效。然而,當我添加睡眠(45)時,這確實起作用。很明顯,我不能在我的規格中三次睡覺(45次),但是知道做什麼是很好的,所以我可以用更快的方法更接近這一點。
我從我的實驗中得出的結論是,Ruby跟蹤時間,Javascript跟蹤時間,Timecop快速轉發Ruby時間,但不是Javascript時間。有沒有一種方法可以在我的Capybara測試中快速前進45秒,以便我的Javascript事件啓動?
這是導致我的測試中失敗的函數:
$('.votable').one('click', '.vote', function() {
$('.post-vote').
delay(45000).
queue(function() {
$(this).dialog('open')
});
});
同樣,當延遲去掉,我的規格傳球,但我需要的延遲。我怎樣才能在我的水豚測試中把它存根?或者我需要用Jasmine測試方法嗎?
可以使延遲的價值動態?而不是等待45k毫秒,你可能會在你的測試環境中有50毫秒的時間;一個更合理的時間量。 – deefour 2013-03-19 01:48:00
@Deefour你的意思是將延遲時間存儲在一個變量中,然後在我的規格中重新定義該變量?這聽起來像個好主意,你能舉個例子嗎? – 2013-03-19 05:54:52