1

我已经设置了一些 UIAutomation 脚本,这些脚本最终将成为 jenkins 测试。UIAutomation 脚本不以詹金斯友好的格式输出,所以我使用tuneup_js,特别是这个失败异常

当测试失败时,我可以抛出一个自定义的FailureException. 异常被优雅地捕获,并且失败输出被正确记录。输出是Error: FailureException: "hello world"

当我尝试FailureExceptiononAlert处理程序中抛出同样的问题时,就会出现我的问题,UIATarget.onAlert = function onAlert(alert) {...}. 在我的函数中,如果标题与某个正则表达式匹配onAlert,我会抛出一个,但永远不会被捕获,并且测试会因以下输出而崩溃:FailureExceptionFailureException

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

有什么想法可以将其FailureException放入onAlert处理程序中并正确处理吗?看起来好像onAlert是在与其他测试不同的范围内处理的,但我不确定如何纠正它。

4

1 回答 1

3

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

如果您查看testtuneup_js 中的函数,它会捕获一个异常,fail然后调用UIALogger.logFail. UIATarget.onAlert将响应一些顶级警报事件并在该上下文中运行,在测试函数之外,因此在那里触发异常意味着它不会被test.

有效的一件事是使用闭包将数据返回给调用者,例如:

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");
}
}

希望有帮助!

于 2013-05-01T18:53:39.380 回答