mocha 测试 nodejs mssql - 连接已关闭
mocha testing nodejs mssql - connection is closed
尝试使用 Mocha 为 NodeJS 和 MsSql 设置测试。但是每次我 运行 我的测试都会得到 "Connection is closed".
奇怪的是,当我 运行 应用程序本身时它确实有效,然后,我确实从数据库中取回数据并且连接不会很快关闭。
我的测试代码:
var express = require('express');
var expect = require('chai').expect;
var calendar = require('./../Server/calendarDatabase');
describe("Calendar", function () {
describe("Database", function () {
it("should get stuff from the database", function (done) {
calendar.getAll().then(function (returnValue) {
console.dir(returnValue);
expect(returnValue.count).to.equal(5);
done();
});
});
});
});
我的日历数据库代码是什么样的
var express = require('express');
var sql = require('mssql');
var config = require('./../config');
var calendarDbConnection = {};
sql.connect(config.mssql, function (err) {
console.log(err);
});
calendarDbConnection.getAll = function () {
return new sql.Request()
.query('select * from Human')
.then(function (recordsets) {
return recordsets;
})
.catch(function (err) {
console.log(err.message);
});
}
module.exports = calendarDbConnection;
最后,这是我在 运行安装应用程序时使用的:
var express = require('express');
var router = express.Router();
var calendarDb = require('./../Server/calendarDatabase');
router.get("/", function (request, response) {
response.render('calendar', { title: 'Calendar app title' });
});
router.get('/getYear/:year', function (request, response) {
calendarDb.getAll().then(function(returnValue) {
console.dir(returnValue);
});
response.send();
});
module.exports = router;
所以我的问题是,为什么这在使用 Mocha 进行测试时不起作用,但在 运行 应用程序本身时却起作用?我在这里错过了什么?
我的连接似乎已关闭,因为框架没有保持打开状态。
让我的联系成为一个承诺。
describe("Calendar", function () {
describe("Database", function () {
it("should get stuff from the database", function (done) {
calendar.Connect().then(function () {
calendar.getAll().then(function (returnValue) {
console.dir(returnValue);
expect(returnValue.count).to.equal(5);
}).done();
});
});
});
});
日历数据库:
calendarDbConnection.Connect = function() {
return sql.connect(config.mssql);
}
我为此奋斗了一段时间,要么破坏了 mocha 测试,要么破坏了我的 api 功能,要么破坏了池化。最终使用以下代码使用成功合并的回调。
首先我在根目录下创建了一个名为sql.js
的文件
var config = require('./config.js');
var sql = require('mssql');
var cp = new sql.ConnectionPool(config.sql);
const connect = function(callback) {
if(cp.connected) {
callback(cp);
return true;
}
cp = new sql.ConnectionPool(config.sql, function() {
callback(cp);
});
}
module.exports = {
connect
}
然后在任何控制器中,我只需包含模块 sql 并像这样引用它
var sql = require('../../sql.js');
const someFunction = (callback) => {
sql.connect(function(cp) {
cp.request()
.input('jti', jti)
.input('reference', reference)
.execute('insertToken', function (err, recordset) {
callback(err, recordset);
});
})
}
尝试使用 Mocha 为 NodeJS 和 MsSql 设置测试。但是每次我 运行 我的测试都会得到 "Connection is closed".
奇怪的是,当我 运行 应用程序本身时它确实有效,然后,我确实从数据库中取回数据并且连接不会很快关闭。
我的测试代码:
var express = require('express');
var expect = require('chai').expect;
var calendar = require('./../Server/calendarDatabase');
describe("Calendar", function () {
describe("Database", function () {
it("should get stuff from the database", function (done) {
calendar.getAll().then(function (returnValue) {
console.dir(returnValue);
expect(returnValue.count).to.equal(5);
done();
});
});
});
});
我的日历数据库代码是什么样的
var express = require('express');
var sql = require('mssql');
var config = require('./../config');
var calendarDbConnection = {};
sql.connect(config.mssql, function (err) {
console.log(err);
});
calendarDbConnection.getAll = function () {
return new sql.Request()
.query('select * from Human')
.then(function (recordsets) {
return recordsets;
})
.catch(function (err) {
console.log(err.message);
});
}
module.exports = calendarDbConnection;
最后,这是我在 运行安装应用程序时使用的:
var express = require('express');
var router = express.Router();
var calendarDb = require('./../Server/calendarDatabase');
router.get("/", function (request, response) {
response.render('calendar', { title: 'Calendar app title' });
});
router.get('/getYear/:year', function (request, response) {
calendarDb.getAll().then(function(returnValue) {
console.dir(returnValue);
});
response.send();
});
module.exports = router;
所以我的问题是,为什么这在使用 Mocha 进行测试时不起作用,但在 运行 应用程序本身时却起作用?我在这里错过了什么?
我的连接似乎已关闭,因为框架没有保持打开状态。 让我的联系成为一个承诺。
describe("Calendar", function () {
describe("Database", function () {
it("should get stuff from the database", function (done) {
calendar.Connect().then(function () {
calendar.getAll().then(function (returnValue) {
console.dir(returnValue);
expect(returnValue.count).to.equal(5);
}).done();
});
});
});
});
日历数据库:
calendarDbConnection.Connect = function() {
return sql.connect(config.mssql);
}
我为此奋斗了一段时间,要么破坏了 mocha 测试,要么破坏了我的 api 功能,要么破坏了池化。最终使用以下代码使用成功合并的回调。
首先我在根目录下创建了一个名为sql.js
的文件var config = require('./config.js');
var sql = require('mssql');
var cp = new sql.ConnectionPool(config.sql);
const connect = function(callback) {
if(cp.connected) {
callback(cp);
return true;
}
cp = new sql.ConnectionPool(config.sql, function() {
callback(cp);
});
}
module.exports = {
connect
}
然后在任何控制器中,我只需包含模块 sql 并像这样引用它
var sql = require('../../sql.js');
const someFunction = (callback) => {
sql.connect(function(cp) {
cp.request()
.input('jti', jti)
.input('reference', reference)
.execute('insertToken', function (err, recordset) {
callback(err, recordset);
});
})
}