Тема try-catch поднималась неоднократо, в хелпе тесткомплита про ограничения try-catch тоже написано, но я столкнулся с поведением, которое поставило меня в тупик.
Итак, есть модуль 1
function factory(callback){ return { run:function(v){ try{ callback.call(v); }catch(e){ Log.Message("in factory"); } } } }
а в модуле 2
function test(){ var o = factory(function(){this.someMethod();}); o.run({}); }
Если запустить тест в таком виде, то try-catch в модуле 1 не отработает и тесткомплит ругнется "Microsoft JScript runtime error. Object doesn't support this property or method"
Но стоит сделать вот так
function test(){ var o = factory(function(){this.someMethod();}); try{ o.run({}); }catch(e){ Log.Message("in test"); } }
и все отработает нормально, а в логе будет одна запись: "in factory".
Т.е. try-catch в тесте никаких ошибок не ловит и при этом каким-то магичиским образом влияет на работу try-catch в другом модуле.
Если честно, то я в растерянности. Может кто нибудь встречал/знает объяснение такого поведения? (testcomplete 9.3)