假阳性单元测试结果

False positive unit test result

我注意到 javascript 及其框架中的单元测试非常痛苦。许多失败的积极结果。即

it('should call Event.create when all if ok', function () {
  EventsPersistancyService.accept(message).then(function () {
    sinon.assert.calledOnce(s3);
    done();
  });
});

EventsPersistancyService:

var EventsPersistancyService = {
  accept: function acceptService(msg) {

    var worker_id = WorkerCacheService.get('some login');
    var app_category = AppCategoryService.get('some');
    Event.create('msg'); <------------  **first**

    var p = Q.all([worker_id, app_category]).then(function () {
      var content = msg.content.toString();
      content = JSON.parse(content);

      var tmp = {};

      return Event.create('msg'); <------ **second**
    });

    return p;
  }
}

在那个例子中,测试通过了,但它不应该通过。我做错了什么?

首先,您从未在 it 的回调中定义完成回调。但是对于承诺,最好是 return 测试中的承诺,mocha 将等待承诺解决。

it('should call Event.create when all if ok', function () {
  return EventsPersistancyService.accept(message).then(function () {
    sinon.assert.calledOnce(s3);
  });
});

完成回调的工作示例(注意 done 声明作为函数参数):

it('should call Event.create when all if ok', function (done) {
  EventsPersistancyService.accept(message).then(function () {
    sinon.assert.calledOnce(s3);
    done();
  });
});