我已经设置了一些最终将成为jenkins测试的UIAutomation脚本。 UIAutomation脚本不以jenkins友好格式输出,因此我使用tuneup_js,特别是此failure exception。
当测试失败时,我可以抛出自定义FailureException
。正常捕获异常并正确记录失败输出。输出为Error: FailureException: "hello world"
。
当我尝试在FailureException
处理程序onAlert
内抛出相同的UIATarget.onAlert = function onAlert(alert) {...}
时,会出现问题。在我的onAlert
函数中,如果标题与某个正则表达式匹配,则抛出FailureException
,但FailureException
永远不会被捕获,并且测试会因以下输出而崩溃:
Script threw an uncaught JavaScript error: hello world on line 18 of assertions.js
我有什么想法可以将FailureException
放在onAlert
处理程序中并正确处理它?似乎onAlert
的处理范围与其他测试不同,但我不确定如何纠正。
答案 0 :(得分:3)
这里的核心问题是js异常并不真正适用于异步代码,例如事件循环(这就是为什么你很少在“现代javascript”代码中看到抛出的异常而人们使用错误回调代替)。
如果查看tuneup_js中的test
函数,它会捕获fail
引发的异常,然后调用UIALogger.logFail
。 UIATarget.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");
}
}
希望有所帮助!