2016-02-18 3 views
2

Я работаю над сложным вычислением, которое включает сбор данных из нескольких коллекций, а затем хруст чисел. С этой целью я следую TDD и хочу сначала написать Unit Test. Я понимаю, что запрос к базе данных нарушает парадигму тестирования модуля, и я должен использовать макетные объекты, но я пока что хочу запросить базу данных, чтобы протестировать несколько номеров. Я пытаюсь использовать обещания Mongoose, чтобы обойти асинхронный аспект NodeJS, но я не могу понять это. Вот мой код:Unit Test MongoDB query using Mongoose Promise

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

    });