1

나는 결국 jenkins 테스트가 될 UIAutomation 스크립트를 설정했습니다. UIAutomation 스크립트는 친숙한 형식으로 출력되지 않으므로 tuneup_js, 특히 failure exception을 사용하고 있습니다.iOS의 UIAutomation UIATarget.onAlert에서 사용자 정의 javascript 예외 처리

테스트가 실패하면 맞춤 FailureException을 던질 수 있습니다. 예외가 정상적으로 발견되고 실패 출력이 올바르게 로깅됩니다. 출력은 Error: FailureException: "hello world"입니다.

onAlert 처리기, UIATarget.onAlert = function onAlert(alert) {...} 안에 동일한 FailureException을 던지려고하면 문제가 발생합니다. 내 onAlert 함수에서 제목이 특정 정규식과 일치하는 경우 나는 FailureException을 던져하지만 FailureException 잡힌되지 않습니다 및 테스트 결과는 다음과 충돌 :

Script threw an uncaught JavaScript error: hello world on line 18 of assertions.js 

모든 아이디어를 내가 onAlert 안에이 FailureException을 던질 수있는 방법 처리기를 처리하고 제대로 처리합니까? onAlert이 나머지 테스트와 다른 범위에서 처리되는 것처럼 보이지만이를 수정하는 방법을 모르겠습니다.

답변

3

여기 핵심 문제는 js 예외가 이벤트 루프와 같은 비동기 코드에서 실제로 작동하지 않는다는 것입니다. 따라서 "현대 javascript"코드에서 예외가 발생하는 경우가 거의없고 오류 콜백을 대신 사용합니다.

tuneup_js의 test 함수를 보면 fail이 던져진 예외를 잡은 다음 UIALogger.logFail을 호출합니다. UIATarget.onAlert은 테스트 함수 외부에서 일부 최상위 경고 이벤트에 응답하고 해당 컨텍스트에서 실행되므로 예외가 트리거되면 test의 try/catch 블록에 의해 catch되지 않습니다. 도움이

test("My UI Test", function(app, target) { 
    var failureName = null; 
    setupOnAlert(function(name) { 
     failureName = name; 
    }); 
    // do something that might trigger a UIAlert 
    if (failureName) { 
     fail(failureName); 
    } 
}); 

function setupOnAlert(fail_callback) { 
UITarget.onAlert = function(alert) { 
    // do something that may fail, if it fails: 
    fail_callback("Some kind of error"); 
} 
} 

희망 : 작업을 수행

것은 발신자, 뭔가 같은 데이터를 반환하는 클로저를 사용하고 있습니다!

+0

훌륭해, 고마워. – johngraham