1
我有一個問題,我正在驗證當前時間已被插入到HTML中(用於使用JavaScript做一類time_ago
)。Rspec請求測試中的競爭條件
當前的UNIX時間(時期)呈現在給定的HTML元素的數據的數據屬性,在這種情況下是這樣的:
<a href="/somewhere" data-last-points-awarded-at="1331606458">Something Happend</a>
但是,當我運行測試:
recipe = Factory(:recipe, name: "Apple Pie", user: @user)
visit some_path
time_in_layout = find('a[data-last-points-awarded-at]')['data-last-points-awarded-at']
current_time = Proc.new { Time.now }.call.to_i.to_s
time_in_layout.should eql(current_time)
一旦運行我的測試失敗......但只是勉強:
Failure/Error: time_in_layout.should eql(current_time)
expected: "1331606459"
got: "1331606458"
(compared using eql?)
一切都很好,測試幾乎是我真的希望它能夠工作,但是,proc返回一秒鐘後的時間,我該如何解決這個問題?就像我在測試開始時如何鎖定時間一樣,我甚至可以做這樣的事情嗎?
這看起來很酷!但只是一個測試的完整寶石?這是過度殺傷力?這可能是我唯一的選擇。 – 2012-03-13 03:36:04
您只能將它加載到:測試環境中,但每個gem都會添加一些加載時間,如果您不小心,則對Time類進行混亂可能會導致其他測試產生意想不到的後果。 – 2012-03-13 03:45:39
更好的方法是在撥打電話之前嘲笑時間。這在單元測試級別上效果更好,但如果您在單元級別測試它,則可以在請求級別測試其他內容(例如顯示時間並且在合理範圍內)。 – 2012-03-13 03:46:39