2016-03-06 110 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(); 
    }); 
});