2013-11-01 3 views
8

webpageupdates에 따르면 최근 버전의 Capybara에서는 sleep 또는 wait_until이 유효하지 않습니다.카피 바라는 수면을 필요로합니까?

그러나 테스트에 sleep(1) 호출을 추가하면 빠른 컴퓨터에서만 작동하는 테스트 집합이 있습니다.

것은이
def unix_wait 
    case RbConfig::CONFIG['host_os'] 
    when /darwin/ 
    when /linux-gnu/ 
    sleep(1) 
    end 
end 

, 내가 늙은 우분투 12.04 쿼드 코어를 가지고 :

describe "dosimeters page" do 
    before do 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

내가 같이 unix_wait을 정의한

describe "dosimeters page" do 
    before do 
    unix_wait 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

가된다 : 즉, 보이는 테스트입니다 Jenkins에서이 테스트를 실행하는 랩톱으로 unix_wait 호출 없이는 모든 것이 잘 작동합니다. 테스트는 무작위로 우분투 13.10을 실행하는 hexacore 데스크탑과 맥북 프로 랩탑에서 실패했지만, unix_wait 호출을 추가하면 테스트가 통과됩니다.

테스트 실패 자체는로드 실패 (즉, 일부 실행에는 CSS 요소가 누락되었지만 다른 실패에는 표시되지 않음)를 나타내며 테스트중인 것은 실제로 사이트를로드 할 때 작동합니다.

여기에 적절한 조치는 무엇입니까? 테스트 중에는 sleep을 사용할 수 없으며 wait_until도 아닙니다. 그러나 수면은 효과가 있지만 내게는 너무 미숙 한 것처럼 보입니다. #synchronized을 볼까요? 블로그 게시물에서 수집 한 내용에서 click_link에 전화 할 때 이미 전화가 걸려서 테스트가 여전히 실패하고 있습니다.

여기에 수락 된 프로토콜은 무엇입니까?

내가 중요하다고 생각하기 때문에 추가해야합니다. 이것은 모두 자바 스크립트 테스트입니다. 나는 qt4 (qt5가 아님)에 구축 된 capybara-webkit을 사용하고 있습니다. 나는 디버거 단계로 poltergeist 또는 다른 자바 스크립트 드라이버로 전환하는 것을 고려하고 있습니다.

+0

디버깅을 위해 webdriver를 사용해 볼 수도 있지만 비슷한 문제가 있습니다. –

+0

아약스를 사용할 때 capybara-webkit에서 동일한 문제가 발생했습니다. 폴터 테이스트가이 문제를 해결할 수 있는지는 모르겠지만 시도해 볼 가치가 있습니다. – basgys

+0

보고있는 실패에 대해 더 자세히 설명해 주시겠습니까? 나는 "css elements missing"이 진정으로 수반하는 것이 무엇인지 분명하지 않다. – Shepmaster

답변

4

테스트 어설 션에서 이미 페이지의 콘텐츠를 확인한 경우 해당 콘텐츠를 사용할 수있게 될 때까지 일정한 시간 동안 기다립니다.

그래서, 대신 잠을 추가하는 당신은 카피 바라 콘텐츠를 검사 할 때 Ajax와 요소 등의 로딩이 암시 적으로 대기 때문에 수용

expect(page).to have_content 'Success' 

같은 것을 추가 할 수 있습니다. 당신은 당신이 더 이상 즉 3 파티 질의/로그인

Capybara.default_wait_time = 5 
+1

Capybara는 Ajax를 수용해야하지만 테스트 중에': js => true '를 사용할 때 실패하기 때문에 이것이 확실하지는 않습니다. 'default_wait_time'을 바꾸는 것은별로 도움이되지 않지만 때로는'save_and_open_page'가 문제를 수정합니다 (창에 작업을 방해하게 함). – mmr

+0

Asta가 맞습니다. 콘텐츠를 확인하지 않아서 카피 바라의 대기 메커니즘이 실행되지 않는 것이 문제입니다. Asta는'have_content' 체크를 언급하고 있습니다. 당신은 그런 일을하지 않습니다. – kross

+0

이것은 또한 여기에 답변 : http://stackoverflow.com/a/20003280/2363935 – kross

0

wait_untilsleep의 좋은 대안이 using_wait_time,입니다 걸릴 수 있습니다 알고 요소의 로딩을 허용해야하는 경우

당신은 기본 대기 시간을 변경할 수 있습니다 그 예가 아래에 나와 있습니다.

using_wait_time 5 do 
    page.should have_content '<content>' 
end 

페이지를 새로 고침 한 다음 상태를 확인할 수도 있습니다. 이것은 나를 위해 때때로 작동합니다.

visit current_url 
관련 문제