使用 Mongoose Promise 的单元测试 MongoDB 查询

Unit Test MongoDB query using Mongoose Promise

我正在进行一项复杂的计算,其中涉及从多个集合中收集数据,然后处理这些数字。为此,我正在关注 TDD,并想先编写一个单元测试。我知道查询数据库违反了单元测试范例,我应该使用模拟对象,但我暂时想查询数据库以测试一些数字。我正在尝试使用 Mongoose promises 来绕过 NodeJS 的异步方面,但我无法弄清楚。这是我的代码:

(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() 中输入无效数字,我的测试也总是通过。

传入done作为测试的函数参数。这将告诉单元测试在它被调用之前不要结束。

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

    });