2013-01-16 3 views
7

내 테스트에서 나는 필드를 채우고 Enter를 누릅니다. 이 필드는 다음 페이지에서 결과 세트를 리턴합니다. 여기 카피 바라에서 수면을 사용하는 더 좋은 방법이 있습니까?

내 헬퍼 방법입니다 : 그 후

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
end 

I가 단순히라는 단계 :

page.should have_content(tutor) 

그러나, 문제는 그 경우에도 내 페이지가로드 한 후 페이지 결과, 거짓 일지라도 통과 한 단계 단계에서 디버거를 설정하고 수동으로 확인하면 예상대로 어설 션이 실패합니다. 내 가정은 다음 단계는 페이지가 다시로드되기 전에 확인하는 것입니다. 나는 그것이처럼 보이게 내 검색 방법의 끝에서 잠을 배치 :

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
    sleep 5 
end 

그러나 나는 잠을 사용하여이 문제를 해결하는 해키 방법입니다 같은 느낌. 나는 Capybara 2를 사용하여 wait_until의 사용이 제거되었습니다. 수면에 의존하기보다는이 문제를 해결할 더 좋은 방법이 있습니까?

답변

1

이 테스트는 페이지에 이미 tutor이 있으므로 전달됩니다.

따라서 tutor이 아닌 다른 것으로 확인해야합니다. 텍스트가 tutor 인 요소의 경우 페이지를 다시로드 한 후에 만 ​​표시됩니다.

1

HTML 페이지의 tutor 텍스트가 숨겨져 있습니까? has_content?은 보이지 않는 숨겨진 텍스트를 포함하여 html로 표시된 모든 텍스트에 대해 true을 반환합니다. 따라서 페이지의 보이는 텍스트 만 검사하는 expect(page).to have_text(tutor)으로 바꾸는 것이 좋습니다. .text도 상당히 느린 방법이므로이 여분의 초를 사용하면 편리 할 수 ​​있습니다.

또 다른 방법은 대부분의 경우에 정말 편리 이후, 귀하의 사양 도우미에 wait_until 방법을 복원하는 것입니다 : 어떤 경우에

def wait_until(timeout = DEFAULT_WAIT_TIME) 
    Timeout.timeout(timeout) do 
    sleep(0.1) until value = yield 
    value 
    end 
end 

그것은 고정 된 시간 초과 때마다 기다리는 것보다 더 좋을 것입니다.

관련 문제