Сбой соединения транспортира oracledb с NoSuchSessionError - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь запустить управляемый данными тест транспортира. Прежде всего, запустите запрос к таблице оракулов, чтобы получить набор данных. Затем переберите эти данные, вызвав другие спецификации. Соединение оракула обрывается без ошибки. Таким образом, я запускаю в режиме отладки, я получаю это необработанное исключение:

NoSuchSessionError: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
    at session_.flow_.promise (C:\Users\me\repos\wbhtml5\designer-e2e\node_modules\selenium-webdriver\lib\webdriver.js:847:16)
    at new Promise (<anonymous>)
    at SimpleScheduler.promise (C:\Users\me\repos\wbhtml5\designer-e2e\node_modules\selenium-webdriver\lib\promise.js:2242:12)
    at promise.finally (C:\Users\me\repos\wbhtml5\designer-e2e\node_modules\selenium-webdriver\lib\webdriver.js:846:34)
    at promise.then.error (C:\Users\me\repos\wbhtml5\designer-e2e\node_modules\selenium-webdriver\lib\promise.js:1684:12)

Я не могу понять, почему я получаю ошибки Promise или ошибки сеанса. Я не использую браузер / веб-драйвер, но я просто хочу подключиться к oracle.

Вот моя тестовая спецификация, в которой работает транспортир, устанавливающий соединение:

test.js

import VerifyDesignSpec from '../../specs/verify-design.e2e-spec';
import dbms = require('../../database');

// Connect to oracle and get list of parts
dbms.getProductFolderPartsCallback(dbms.PFPartKind.Switcher, dbms.PFPartStatus.Production, runProductFolderCallback);

// Callback function to loop over list of parts
function runProductFolderCallback(err, result) {
  const partsToTest = JSON.parse(result);
  partsToTest.forEach(part => {
    VerifyDesignSpec.ProductFolderDesignVerification(part, null);
  });
}

Это database.js

import Common from './common';
import credentials = require('./credentials');
import oracledb = require('oracledb');

export function getProductFolderPartsCallback(partType: PFPartKind, partStatus: PFPartStatus, callback) {
  const dbms = oracledb;
  dbms.fetchAsString = [ oracledb.CLOB ];

  const cred = credentials.getCredential(credentials.TestCredentialKind.SomeDB);

  dbms.getConnection({
    user: cred.Userid,
    password: cred.Password,
    connectString: cred.ConnectionString
  },
    function (connErr, conn) {
      if (connErr) {
        Common.error(`getProductFolderParts: connection error: ${connErr}.`, true);
        return callback(connErr);
      }

      const sqlCmd = 'SELECT PART_JSON FROM WEBENCHDB.ODT_PRODUCT_FOLDER_PARTS';

      conn.execute(sqlCmd, function (queryErr, result) {
        if (queryErr) {
          Common.error(`getProductFolderParts: query error: ${queryErr}`, true);
          closeConnection(conn);
          return callback(queryErr);
        }

        let resultJSON = '';

        (result.rows as any[]).forEach(row => {
          if (resultJSON.length === 0) {
            resultJSON = `[ ${row[0]}`;
          } else {
            resultJSON = resultJSON + `, ${row}`;
          }
        });

        resultJSON = resultJSON + ']';

        closeConnection(conn);

        return callback(null, resultJSON);
      }
      );
    });
}

function closeConnection(conn) {
  conn.close(function (err) {
    if (err) {
      Common.error(`getProductFolderParts: connection close error: ${err}`, true);
    } else {
      Common.info(`getProductFolderParts: connection closed`, true);
    }
  });
}
...