여기에 기존 지식을 추가하려면 :
JS 테스트의 경우 Capybara는 두 개의 스레드 (하나는 RSpec, 하나는 Rails)와 두 번째 프로세스 (브라우저)를 동기화 상태로 유지해야합니다. 대부분의 매처 및 노드 찾기 방법에서 대기 (구성된 최대 대기 시간까지)하여이를 수행합니다.
Capybara에는 주로 기다리지 않는 메서드가 Node#all
있습니다. 그것들을 사용하는 것은 간헐적으로 실패하기를 바라는 스펙을 말하는 것과 같습니다.
받아 들여지는 대답은 page.first('selector')
. 을 Node#first
사용Node#all
하기 때문에 적어도 JS 사양에서는 바람직하지 않습니다 .
즉, Capybara를 다음과 같이 구성 Node#first
하면 기다립니다.
# rails_helper.rb
Capybara.wait_on_first_by_default = true
이 옵션은 Capybara 2.5.0에서 추가 되었으며 기본적으로 false입니다.
Andrei가 언급했듯이 대신
find('selector', match: :first)
또는 선택기를 변경하십시오. 둘 다 구성 또는 드라이버에 관계없이 잘 작동합니다.
더 복잡하게하기 위해 이전 버전의 Capybara (또는 구성 옵션이 활성화 된 경우)에서는 #find
모호함을 기꺼이 무시하고 첫 번째 일치하는 선택자를 반환합니다. 이것은 당신의 사양을 덜 명확하게 만들기 때문에 좋지 않습니다. 이것이 더 이상 기본 동작이 아닌 이유입니다. 세부 사항은 위에서 이미 논의 했으므로 생략하겠습니다.
추가 리소스 :