2016-02-18 20 views
2

我正在處理一個複雜的計算,它涉及從多個集合收集數據,然後處理這些數字。爲此,我正在關注TDD並希望首先編寫單元測試。我知道查詢數據庫違反了單元測試範例,我應該使用模擬對象,但我暫時想查詢數據庫以測試幾個數字。我試圖使用Mongoose promise來解決NodeJS的異步方面,但我無法弄清楚。這裏是我的代碼:單元測試使用Mongoose Promise的MongoDB查詢

(function (argument) { 
'use strict'; 

var should = require('should'); 
var assert = require('chai').assert; 
var mongoose = require('mongoose'); 
var MeasureTherm = mongoose.model('MeasureTherm'); 

describe('Calculations Server Test', function(){ 

    describe('Model Tests', function() { 
     it('should find all MeasureTherms for a Program, Year and End Use', function() { 
      var promise = getMeasureThermsByProgramAndEndUse("Program 1", 2015, "End Use 1").then(function(results) { 
       this.fulfill(results); 
      }); 

      promise.onFulfill(function(results){ 
       assert.equal(200, results.length); 
      }); 

     }); 
    }); 
}); 

var getMeasureThermsByProgramAndEndUse = function (program, year, endUse) { 
    return MeasureTherm.find().exec(); 
}; 
})(); 

我的測試總是就算我在assert.equal輸入無效行程數()。

回答

0

通過完成作爲測試的功能參數。這將告訴單元測試在調用之前不要結束。

it('should find all MeasureTherms for a Program, Year and End Use', function (done) { //<-- HERE 
     var promise = getMeasureThermsByProgramAndEndUse("Program 1", 2015, "End Use 1").then(function(results) { 
      this.fulfill(results); 
     }); 

     promise.onFulfill(function(results){ 
      assert.equal(200, results.length); 
      done(); //<-- AND HERE 
     }); 

    });