Пожалуйста, помогите решить проблему ниже:
Я пытаюсь выполнить модульное тестирование модуля dbAdapter с помощью mocha.
dbAdapter для подключения к оракулу и выполнения команд sql (dbAdapter.js)
const oracledb = require('oracledb');
let doConnect = function(callback) {
oracledb.getConnection(config, callback);
};
let execute_selectquery = function(query, results) {
this.query = query;
this.execute = function(connection, callback) {
connection.execute(query, function(err, result) {
if (err) {
return callback(err);
}else {
callback(result);
}
})
};
модульный тест для проверки запроса выбора: (test.js)
describe(`test proxyquire`, function() {
const proxyquire = require('proxyquire')
let dbAdapter
let oracledbStub;
before(function() {
oracledbStub = {
model: function() {
return {
updateDb: function(id, first, last, callback) {
callback(null, 'done');
}
};
}
};
dbAdapter = proxyquire('../controllers/dbAdapter.js', {'oracledb': oracledbStub});
});
it.only(`test route`, function(done) {
let query = "select * from users";
db.execute_selectquery(query, function(err, result){
console.log(result)
})
})
})
В приведенном выше модульном тесте я использовал proxyquire, чтобы я мог использовать свой смоделированный oracledbStub вместо oracledb в dbAdapter.js
Когда я запускаю модульный тест, я получаю следующую ошибку:
Uncaught TypeError: Illegal invocation
at Function.getConnection (node_modules/oracledb/lib/oracledb.js:295:10)
at Function.getConnection (node_modules/oracledb/lib/util.js:99:19)
at doConnect (controllers/dbConnection/oracleAdapter.js:47:14)
at fn (node_modules/async/lib/async.js:641:34)
at Immediate.<anonymous> (node_modules/async/lib/async.js:557:34)
Я подписался на следующий блог:
http://www.devblogrbmz.com/nodejs-mocking-with-proxyquire/
Полагаю, мне не хватало какой-то детали, и я застрял с тех пор.