unit testing使用Mongoose Promise的MongoDB查询

我正在做一个复杂的计算,涉及从多个集合收集数据,然后处理这些数字。 为此,我正在关注TDD,并希望先写unit testing。 我知道查询数据库违反unit testing范例,我应该使用模拟对象,但我暂时我想查询数据库testing几个数字。 我试图使用Mongoose的承诺来解决NodeJS的asynchronous方面,但我无法弄清楚。 这是我的代码:

(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()中input了无效的数字,我的testing也总是通过。

       

网上收集的解决方案 "unit testing使用Mongoose Promise的MongoDB查询"

作为testing的function参数传入完成。 这将告诉unit testing不会结束,直到它被调用。

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