mocha测试nodejs mssql - 连接已关闭

时间:2016-04-27 09:44:01

标签: sql-server node.js mocha

尝试使用Mocha使用MsSql设置NodeJS的测试。但每次我运行我的测试时,我都会得到一个" Connection已关闭"。

enter image description here

奇怪的是,当我自己运行应用程序时它确实有效,然后,我确实从数据库中获取数据并且连接不会很快关闭。

我的测试代码:

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

我的calendarDatabase代码是什么样的

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进行测试时这不起作用,但是在运行应用程序时它会这样做?我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

由于框架没有保持打开状态,我的连接似乎已关闭。 让我的联系成为一种承诺。

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

日历db:

calendarDbConnection.Connect = function() {
    return sql.connect(config.mssql);    
}

答案 1 :(得分:0)

我与此争吵了一段时间,要么打破摩卡测试,打破我的api功能,要么打破池化。使用以下代码结束使用成功汇总的回调。

首先我在root中创建了一个名为sql.js的文件

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

        });

    })

}

然后在任何控制器中,我只是包含模块sql并像这样引用它

chart = stackedAreaChart(name='stackedAreaChart' 
                         ,height=500 
                         ,width=900 
                         #,x_is_date=True
                         ,use_interactive_guideline = True
                         ,margin_bottom = 120
                        )
chart.create_x_axis(name = "xAxis", date = True,  format = '%b %Y' )
chart.axislist['xAxis']['tickValues']="""Object.values(datum[0])[0].map(x => x.x)"""