javascript - Jasmine 测试以验证回调不会引发错误

标签 javascript asynchronous jasmine typeerror

如何编写 Jasmine 测试来验证异步回调不会引发错误?

我正在用这个基本模式编写一个函数:

myFunction: function (callback) {
   this.doSomethingAsync(function () {
      if (callback) {
          callback();
      }
    });
    return "done";
 }

参数callback 是可选的。因此,如果用户未提供回调,则 if 语句将跳过回调。

我想编写一个 Jasmine 测试,如果将来有人删除 if 语句,该测试将会失败。但是,我想不出如何构建测试。

删除 if 语句并调用 myFunction 的结果是 Javascript 引发此 TypeError:

Uncaught TypeError: callback is not a function

但是,我想不出如何设置 Jasmine 测试来验证没有出现此类错误。

最佳答案

你可以去掉 doSomethingAsync 函数,让它只调用回调函数

describe('doSomthingAsync', function(){
  function A(){
    this.doSomethingAsync = function(cb){
      setTimeout(function(){
        cb();
      },2000);
    }
    this.myFunction = function(cb){
      this.doSomethingAsync(function(){
          cb();
      })
    }
  }

  it('tests for the throws', function(){
    var a = new A();
    a.doSomethingAsync = function(cb){
      cb();
    }

    var func = function(){
      a.myFunction();
    };

    var func2 = function(){
      a.myFunction(function(){
        console.log('ping');
      });
    }

    expect(func).toThrow(Error);
    expect(func2).not.toThrow(Error);
  });
});

不过,我可能会强制执行回调是可选的这一事实,方法是放置代码以检查回调是否在别处定义。

...
this.doSomethingAsync = function(cb){
    setTimeout(function(){
        if(cb && typeof cb === 'function'){
            cb();
        }
        //do other stuff
    }, 2000)
}

关于javascript - Jasmine 测试以验证回调不会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224309/

相关文章:

unit-testing - 单元测试Angularjs文件上传 Controller 方法

javascript - 创建一个像气泡一样增长的div

java - 在高性能 Java 应用程序中异步处理低速消费者(数据库)的最佳方式是什么

javascript - Node.js 中的 `exit` 事件的行为与手册中的不同

javascript - 即使在成功的 promise 回调之后,组件 Prop 也是空的 - Angular Testing

javascript - Jasmine 使用 PhantomJS : ReferenceError: Can't find variable: $ 丢失了 jQuery

javascript - Bootstrap selectpicker "data-subtext"不更新实时更改

javascript - 网址跟踪功能

javascript - 两个对象,一个 "Is not a function"

node.js - Mongoose 复杂(异步)虚拟