在原型方法中抛出异常,未在外部尝试捕获 (JavaScript) 中捕获

Throwing exceptions inside prototypal methods not being caught in outer try catch (JavaScript)

本文关键字:JavaScript 外部 方法 原型 抛出异常      更新时间:2023-09-26

我使用 JavaScript 进行自动化测试(实际上是 JScript,但我觉得它适用于其中任何一个),我想知道是否有人知道一种方法可以在原型对象方法中抛出异常并让它被外部函数捕获,如下所示。 MyObject将在外部函数内部调用(使用名为TestComplete的测试软件在软件上运行的"测试用例")。

function MyObject()
{
    //Object properties
}
//Inherits object properties and methods from ParentObject
MyObject.prototype = new ParentObject();
MyObject.prototype.constructor = MyObject;
MyObject.prototype.foo = function()
{
    //Will try to perform some action and may throw an exception
}

在一个单独的文件中(经过更多调查,这似乎是主要问题,但由于代码/库的总体结构而无法修复):

function TestCase()
{
    try
    {
        var object = new MyObject()
        object.foo();
    }
    catch(e)
    {
        //Log an error
    }
    finally
    {
        //Clean up
    }
}

我现在看到的是 TestComplete 10(本质上是我的 IDE/调试器)将导致运行时错误,指出抛出异常且未捕获,即使该函数是在外部 try catch 中调用的。 我只使用其他常规函数完成了这项工作,我需要它以这种方式工作,以便在抛出异常时,它将出现捕获,结束测试用例,然后从测试用例步骤中清理。

谢谢!

在一些测试完成论坛上进行更多调查后,这似乎是一个已知问题。 所以这真的与JavaScript/JScript无关。 这在下面的一些论坛帖子中显示,

http://www.sqaforums.com/forums/automatedqa-smartbear-testcomplete/84991-useunit-exceptions.html

http://smartbear.com/forums/f74/t49620/jscript-exception-propagation-between-script-un/

但是,这里有一个更详细的解决方案,您可以做些什么来解决这个问题,它真的很丑陋。 我已经认为这是一个解决方案,但我想知道是否有更好的解决方案,因为我认为这最初是一个JavaScript/JScript错误。

http://smartbear.com/forums/f81/t74287/handling-exceptions-in-different-units/