사용 :
Ruby: ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
Rails: 3.2.9
Capybara: 2.0.3
클릭하면 AJAX 게시 요청을 제출하고 JS 응답을 반환해야하는 링크가있는 Rails 애플리케이션이 있습니다.
링크 코드 :
link_to("Send Notification", notification_path(user_id: user_id), remote: true, method: :post)
JS 응답 (.js.haml 파일)은 링크가있는 페이지에서 다음과 같은 숨겨진 div를 토글해야합니다.
js.haml 파일 내용 :
:plain
var notificationStatusContainer = $('#notification_status');
notificationStatusContainer.val("#{@notification_status_msg}");
notificationStatusContainer.show();
내가 통지를 보내와 오이를 사용하여 사용자에게 알림 상태 메시지를 표시 내 시나리오를 테스트했다 ( 카피 바라 지원에 내장 된 보석 오이 레일 )
id : notification_status 가 있는 요소가 단계 정의에서 성공적인 응답에 표시 되는지 테스트하려고했습니다. 이를 위해 다음 문을 시도했습니다.
page.find('#notification_status').should be_visible
page.should have_selector('#notification_status', visible: true)
page.should have_css('#notification_status', visible: true)
page.find('#notification_status', visible: true)
page.find(:css, 'div#notification_status', visible: true)
위의 어느 것도 나를 위해 일하지 않았고 내 단계에 실패했습니다. 위에 나열된 5 개의 스 니펫 중 마지막 4 개가 다음 오류로 실패했습니다.
'expected to find css "#notification_status" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet)'
다음 문이 올바르게 전달 되었기 때문에 이상했습니다.
page.has_selector?('#notification_status')
그리고 사실 저는 페이지 소스를
print page.html
나타난
<div style='' id='notification_status'></div>
예상했습니다.
마지막으로이 링크 카피 바라는 요소의 속성을 원시 방식으로 검사하는 방법을 보여주는 요소의 속성을 주장합니다 .
또한 Capybara 문서에서 볼 수 있습니까? 메소드 ( http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#visible%3F-instance_method ) 다음 정보 :
Not all drivers support CSS, so the result may be inaccurate.
따라서 요소의 가시성을 테스트 할 때 Capybara의 가시성 결과에 의존하지 않는다는 결론에 도달했습니다. CSS 선택기를 사용하고 링크 카피 바라 에서 제안 된 솔루션을 사용할 때 요소의 속성을 주장하는 방법
나는 다음을 생각 해냈다.
module CustomMatchers
def should_be_visible(css_selector)
find(css_selector)['style'].should_not include('display:none', 'display: none')
end
end
World(CustomMatchers)
용법:
should_be_visible('#notification_status')