带有oracledb的量角器,从oracle db获取值后无法访问其他函数

时间:2018-01-25 06:52:55

标签: protractor oracledb

我正在尝试编写可重用的函数来从oracledb获取值并在需要的地方分配该值。

我的示例代码如下。 //getTtalRwCnt.js

'use strict';
var db_con = require('./oracleConnectPage.js');
// var db = new db_con();
var OracelQP = db_con.getOracleQP_details();
var oracledb = require('oracledb');
var tmpRwCnt;

var getTtalRwCnt = function () {
    oracledb.outFormat = oracledb.ARRAY;
    var query = "SELECT TESTCASEID FROM EXECUTE_TESTCASE";
    oracledb.getConnection(OracelQP, function (err, connection) {
        if (err) {
            console.error(err.message); return;
        }
        connection.execute(query, function (err, result) {
            if (err) {
                console.error(err.message); 
                connection.close();
                return;
            }
            console.log("result----->" + result.rows.length);
            tmpRwCnt = result.rows.length;
            return tmpRwCnt;
        })
    })
}
module.exports.getTtalRwCnt = getTtalRwCnt();

// spec.js

    'use strict';
var rwCnt = require('../DBSample/DB/getTtalRwCnt.js');

describe('Get Total number of Rows from DB', function () {
  it('Get Rw count',function(){
    console.log(rwCnt.getTtalRwCnt());
  });
});

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题:

1)导出错误

module.exports.getTtalRwCnt = getTtalRwCnt();

应该是

module.exports.getTtalRwCnt = getTtalRwCnt;

2) tmpRwCnt是回调函数的返回值,而不是函数getTtalRwCnt的返回值,另外您没有函数getTtalRwCnt的返回值。

要使回调函数中的值可以在回调外使用,可以选择使用Promise解决方案。

'use strict';
var db_con = require('./oracleConnectPage.js');
// var db = new db_con();
var OracelQP = db_con.getOracleQP_details();
var oracledb = require('oracledb');

var getTtalRwCnt = function () {
    return new Promise(function(resolve, reject){
        oracledb.outFormat = oracledb.ARRAY;
        var query = "SELECT TESTCASEID FROM EXECUTE_TESTCASE";
        oracledb.getConnection(OracelQP, function (err, connection) {
            if (err) {
                console.error(err.message);
                reject(err);
            }
            connection.execute(query, function (err, result) {
                if (err) {
                    console.error(err.message); 
                    connection.close();
                    reject(err);
                }
                rwCnt = result.rows.length;
                console.log("result----->" + rwCnt);
                resolve(rwCnt);
            })
        })
    });

};

module.exports = getTtalRwCnt;

// spec.js

'use strict';
var getTtalRwCnt = require('../DBSample/DB/getTtalRwCnt.js');

describe('Get Total number of Rows from DB', function () {
  it('Get Rw count',function(){
    var totalRw = getTtalRwCnt();

    // If you use Jasmine or Chai
    totalRw.then(function(total){
        console.log('total row: ' + total);
        expect(total).toEqual(10);
    });

    // if you use Jasmine 
    expect(totalRw).toEqual(10);

    // if you use Chai and Chai-as-promise
    expect(totalRw).to.eventually.to.equal(10);
  });
});