2012-03-13 5 views
1

현재 시간이 html로 삽입되었는지 확인하는 데 문제가 있습니다 (예 : time_ago과 자바 스크립트 사용). Rspec 요청 테스트의 경쟁 조건

현재 유닉스 시간 (시대)

이 같은이 경우, 주어진 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 시간이 두 번째 나중에 시간을 반환합니다, 어떻게이 문제를 해결할 수 있습니까? 시험 시작시에 시간을 잠 그려면 어떻게 할 수 있습니까? 나는 그런 일을 할 수 있습니까?

답변

2

정확하게 정확히 원하는대로 TimeCop을 확인하십시오.

+0

멋집니다! 단 한 번의 시험만으로도 전체 보석일까요? 그 잔인한가요? 그것은 나의 유일한 선택일지도 모른다. –

+0

: 테스트 환경에서만로드 할 수 있지만 모든 보석에 약간의로드 시간이 추가되고주의하지 않으면 Time 클래스를 망쳐 놓으면 다른 테스트에 예기치 않은 결과가 발생할 수 있습니다. –

+0

더 나은 방법은 전화를하기 전에 시간을 조롱하는 것입니다. 단위 테스트 레벨에서 더 잘 작동하지만 단위 수준에서 테스트하면 요청 수준에서 다른 시간 동안 테스트 할 수 있습니다 (시간이 표시되고 적당한 범위 내에 있음). –