Node.js и Mocha модульное тестирование транзакции отката после каждого теста - PullRequest
0 голосов
/ 15 октября 2019

Я использую node v10.16.0 и пакеты npm mssql 5.1.0 и mocha 6.2.1. Что я хочу сделать, так это написать вспомогательный класс модульного теста sql (ES6), который обрабатывает транзакции и выполняет откат после каждого модульного теста.

db.js

const mssql  = require("mssql");
const config = require("./config");

class DbAccess{
    constructor(){
        this.connection = new mssql.ConnectionPool(config.dbConfig);

        this.connection.connect(err => {
        // ...
        })

        this.transaction = new mssql.Transaction(this.connection);

    }

    beginTransaction(){
        this.transaction.begin();
    }


    rollbackTransaction(){
        this.transaction.rollback();
    }


    executeSql (sql, callback) {
        this.connection.connect().then(() => {
            var req = new mssql.Request(conn);          
            req.query(sql).then((recordset) => {
                callback(recordset);
            })
        .catch ((err) => {
            console.log(err);
            logger.error(err);
            callback(null, err);
        });})
        .catch ((err) => {
            console.log(err);
            logger.error(err);
            callback(null, err);
        });
    }
}

test.js

before(() => {
    dbAccess.beginTransaction();
});

after(() => {
    dbAccess.rollbackTransaction();
});
describe('Test',function(){    
    describe('SelectAll()', function(){
        it('returns all',function(){                      
            dbAccess.insertrecords();                
        });
    });
});    

Эта установка не работает, так как я получаю UnhandledPromiseRejectionWarning: ConnectionError: Connection not yet open.

Я не могу понять, как

  1. Начать транзакцию (в обработчике before),
  2. Выполнить sql запросы (в тесте, например, вставляя записи),
  3. Откатить транзакцию (в обработчике after))
...