繁体   English   中英

使用Jasmine测试异步回调

[英]Testing Asynchronous Callbacks with Jasmine

我正在使用Jasmine 2.1。 我正在尝试使用Jasmine 2.1来测试模块。 我的一个模块具有一个异步执行代码的功能。 应用执行完成后,我需要测试功能的结果。 有没有办法做到这一点? 目前,我的模块如下所示:

var otherModule = require('otherModule');
function MyModule() {
}

MyModule.prototype.state = '';
MyModule.prototype.execute = function(callback) {
  try {
    this.state = 'Executing';
    var m = new otherModule.Execute(function(err) {
      if (err) {
        this.state = 'Error';
        if (callback) {
          callback(err);
        }
      } else {
        this.state = 'Executed';
        if (callback) {
          callback(null);
        }
      }
    });
  } catch (ex) {
    this.state = 'Exception';
    if (callback) {
      callback(ex);
    }
  }
};

module.exports = MyModule;

我正在尝试使用以下模块测试我的模块:

var MyModule= require('./myModule');
describe("My Module", function() {
  var myModule = new MyModule();
  it('Execute', function() {
    myModule.execute();
    expect(myModule.state).toBe('Executed');
  });
});

显然,测试不是在等待执行。 如何通过Jasmine测试异步执行功能? 另外,我是否可以正确使用状态变量? 我迷失在异步堆栈中,并且不确定在哪里可以使用“ this ”。

我建议您看一下jasmine docsasync部分 因此,有了这些信息,我们可以使用done回调函数来等待执行完成,然后再测试任何东西,如下所示:

var MyModule= require('./myModule');
describe("My Module", function() {
  var myModule = new MyModule();
  it('Execute', function(done) {
    myModule.execute(function(){
        expect(myModule.state).toBe('Executed');
        done();
    });
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM