2014-02-25 3 views
10

사용자가 로그인하는 Facebook 페이지로 연결되는 일련의 테스트가 있습니다. 불행히도이 페이지에는 영향을 줄 수없는 몇 가지 JavaScript 오류가있어서 내 테스트가 끝나지 않습니다.일시적으로 Poltergeist에서 js_errors를 false로 설정합니다.

JS 오류 검사를 일시적으로 사용 중지 할 수 있습니까? 나는 같은 것을 생각하고 있었다 : Capybara.javascript_driver.js_errors = false 그리고 나중에 true에 그것을 설정하지만, 불행히도 이것은 작동하지 않습니다. 나는 이것의 변이를 아무 소용없이 시도해 보았다.

내 문제가 해결 될 수있는 방법에 대한 아이디어가 있으십니까?

+1

'try {} catch (e) {}'블록에 테스트 코드를 래핑 할 수 있습니까? 나는 페이스 북 페이지가 열리는 부분을 의미한다. 아니면 자바 스크립트로 작성되지 않은 자체 테스트? –

답변

10

로마 Pominov의 의견 덕분에 해결책을 찾을 수있었습니다. 실제로 매우 간단했습니다 :

나는 방금 진술을 한 후 rescue Capybara::Poltergeist::JavascriptError을 추가했다. 그리고 그것은 매력처럼 작동했다. 내 최초의 생각은 너무 복잡,이 트릭을 만드는

+0

처음 생각한 것은 무엇입니까? 많은 수의 테스트가 있으므로 js_errors를 이전/이후 블록에서 사용하지 않도록 설정하면 각 테스트에 구조 문장을 추가하는 것이 훨씬 바람직합니다. – cjhin

+0

가능한 경우 모든 JS 오류를 처리하도록 제안합니다 (결국 오류입니다) . 가능하지 않다면 나는'구조 '를 고수 할 것입니다. 나의 처음 생각은 내가 기억하는 한 질문에 묘사되었다. 이러한 JS 오류를 해결할 수 있습니까? – TrashyMcTrash

+0

아, 내 생각에, 편집을 취소했다는 생각이 들었을 것입니다. 외부 서비스를 던지고있는 JS 오류입니다. 내 큰 문제는 내가 먼저 외부 서비스를 방문하는 기능 사양이 있다는 것입니다. – cjhin

6

) :

page.driver.browser.js_errors = false 

또한 콜백 주위에 추가 할 수 있습니다 : 당신의 테스트에서

# spec_helpers.rb 
config.around(:each) do |example| 
    original_value = page.driver.browser.instance_variable_get(:@js_errors) 
    if example.metadata.has_key?(:js_errors) 
    page.driver.browser.js_errors = example.metadata[:js_errors] 
    end 

    example.run 

    page.driver.browser.js_errors = original_value 
end 

:

# my_feature_spec.rb 
it "should ignore errors", js_errors: false do 
    ... 
end 
+0

요청하지 않은 사양이 있으면이 기능이 작동하지 않습니다. 맞습니까? 페이지가 다른 사양에 맞게 정의됩니까? – Ibrahim

+0

오이 (Cucumber)에서이 접근법을 사용하는 경우 JS 오류는 모든 후속 테스트에서도 사용할 수 없게됩니다. – Alec

관련 문제