2016-03-06 77 views
-1

我注意到,在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; 
    } 
} 

在该示例中测试通过,但它不应该。我究竟做错了什么?

+0

是否有任何理由你没有创建一个MCVE? – Amit

+0

你能解释一下MCVE是什么吗? – userbb

+0

看[这里](http://goo.gl/yGJ9t6)。 – Amit

回答

1

对于初学者,您从未在您的回调中定义完成回调it。但对于承诺而言,最好是在测试中回复承诺,摩卡将等待承诺解决。

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(); 
    }); 
});