2013-04-29 75 views
1

我已经设置了一些UIAutomation脚本,最终将成为jenkins测试。 UIAutomation脚本不以jenkins友好的格式输出,所以我使用tuneup_js,特别是这个failure exception在iOS的UIAutomation中处理自定义JavaScript异常UIATarget.onAlert

当测试失败时,我可以抛出一个自定义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 

任何想法如何,我可以抛出这个FailureExceptiononAlert处理程序并正确处理它?看起来好像onAlert是在与其他测试不同的范围内处理的,但我不确定如何解决这个问题。

回答

3

这里的核心问题是,js异常并不真正用于异步代码,比如事件循环(这就是为什么你很少在“现代javascript”代码中看到抛出异常的原因,而人们使用错误回调来代替)。

如果您看一下tuneup_js中的test函数,它将捕获由fail引发的异常,然后调用UIALogger.logFailUIATarget.onAlert将响应某些顶级警报事件并在该环境中运行,但不在测试函数中,因此触发异常意味着它不会被test中的try/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 2013-05-01 19:57:38