我如何编写与查询一起进行数据库连接的mocha / chai测试?

问题描述 投票:0回答:1

我正在尝试测试正在测试的文件中的dbMysqlConnect函数,但是我在实际测试该函数时遇到了麻烦,因为在尝试建立连接时总是会出错。您将如何为这种情况编写测试?任何帮助,将不胜感激。

控制台窗口错误:

 Error: connect ECONNREFUSED 127.0.0.1:3306

测试文件:

const mysql = require('mysql');
const mssql = require('mssql');

const actions = require('../src/actions');
const knowledgePortalAPI = require ('../src/api/knowledgePortalAPI'); 
const rewire = require('rewire');
const { expect } = require('chai');
const MockAdapter =  require('axios-mock-adapter');
const Store = require('./store');

//import the updatedState and Event Variables from the store.
const newStore = new Store();
let updatedState = newStore.getUpdatedState();
let event = newStore.getEvent();
let initialState = newStore.getInitialState();

const _ = require('lodash');

describe('testing actions.js file', () => {
  it('testing dbMysqlConnect function', async () => {
      updatedState = _.cloneDeep(initialState);
      const router = rewire('../src/actions');
      const dbMysqlConnect = router.__get__('dbMysqlConnect');
      let memoObject = await dbMysqlConnect(updatedState, event);

  });
});

actions.js:

const mysql = require('mysql');
    const mssql = require('mssql');
    const axios = require('axios');
    const AD = require('ad');
    const bp = require('botpress');
    const configMS = require('./configMS');
    const configMY = require('./configMY');
    const Querystring = require('querystring');
    const flatten = require('flat');
    const moment = require('moment');
    const { viewClaimSummary, viewClaimLineDetail, viewClaimSummaryMulti, providerDemographics, claimConsolidated, memoService } = require('./api');
    const realTimeFlowDialogEngine = require('./RealTimeFlowDialogEngine/documentDialogEngine');
    const claimsDocumentAutoRoutingEngine = require('./RealTimeFlowDialogEngine/claimsSOPDocumentRouter');
    const messageStressTest = require('./RealTimeFlowDialogEngine/messageStressTest');
/**
 * Description of the action goes here
 * @param  {String} params.name=value Description of the parameter goes here
 * @param  {Number} [params.age] Optional parameter
 */

/**
 * Demo call to MySQL DB
 */
async function dbMysqlConnect(state, event, params) {

  var con = mysql.createConnection({
    host: configMY.host,
    user: configMY.user,
    password: configMY.password,
    database: configMY.database
  })

  con.connect(function (err) {
    if (err) {
      throw err;
    }
    con.query('select * from users', function (err, result, fields) {
      if (err) {
        throw err;
      }

      //console.log(result[0]);
      event.reply('#builtin_text', {
        text: `User name is :  ${result[0].First_name}`,
        typing: true
      })
    })
  })
}
javascript unit-testing testing mocha chai
1个回答
0
投票

由于您正在使用rewire,因此您应该可以用模拟实现替换mysql。我建议sinon作为创作该模拟的有用工具,尽管您不必这样做。

sinon
© www.soinside.com 2019 - 2024. All rights reserved.