javascript - Promise catch 未在测试中被捕获

标签 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 block 是否在 result 为空时被调用:

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

现在这确实触发了 throw block ,但是由于某些原因 throw block 没有被 catch 函数捕获。更有趣的是,当同样的代码在测试环境之外运行时,它的行为符合预期。

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

最佳答案

不清楚您使用的是哪种 promise 实现和上下文,但也许您可以尝试向 foo 函数添加一个返回语句

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

关于javascript - Promise catch 未在测试中被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095505/

相关文章:

javascript - 与 yarn 一起安装 devDependencies 和 dependencies

javascript - 如何在 Photoswipe for Wordpress 中取消隐藏图像标题

javascript - JsonConvert.SerializeObject 不会将我的对象序列化为 JSON 字符串

angularjs - 在 AngularJS 指令中加载页面后启用按钮

php - Laravel 测试 dontSee 否定英文文本

javascript - 无法选择元素

javascript - 单击时防止在特定条件下打开 md-select 下拉菜单

javascript - Angular - 动态组件生成

java - jUnit 中 void 方法和线程的单元测试

performance - 有谁知道在指定延迟和吞吐量的同时模拟 Web 服务的方法?