使用 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
});
});
我正在进行一项复杂的计算,其中涉及从多个集合中收集数据,然后处理这些数字。为此,我正在关注 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
});
});