承诺没有陷入考验

时间:2016-01-29 22:51:37

标签: javascript angularjs testing promise karma-jasmine

我有一些看起来像的代码:

function foo(){
  bar().catch(function(){
    //do stuff
  }
}

function bar(){
  return promiseReturner().then(
    function(result){
      if(_.isEmpty(result)){
        throw "Result is empty";
      }
    }
  )
}

我试图测试//do stuff为空时调用result块:

deferred.resolve(null);
foo();
$rootScope.$apply();

现在这实际上会触发throw块,但由于某种原因throw块没有被catch块捕获。更有趣的是,当相同的代码在测试环境之外运行时,它的行为与预期的一样。

为什么我无法在测试代码中触发catch块?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您正在使用哪种承诺实现和上下文,但也许您可以尝试在foo函数中添加一个return语句

function foo(){
  return bar().catch(function(){
    //do stuff
  }
}