繁体   English   中英

如何为数据库连接以及查询编写 mocha/chai 测试?

[英]How can i write a mocha/chai test for a database connection along with queries?

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

控制台 window 中的错误:

 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);

  });
});

动作.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
      })
    })
  })
}

由于您使用的是rewire ,您应该能够用模拟实现替换mysql 我建议sinon作为创作该模拟的有用工具,尽管您不必这样做。

const { stub } = require('sinon');

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

      const mockUsers = [];
      const mockConnection = {
        connect: stub().yields(),
        query: stub().yields(null, mockUsers)
      };
      const mockMySql = {
        createConnection: stub().returns(mockConnection);
      };
      router.__set__('mysql', mockMySql);

      const dbMysqlConnect = router.__get__('dbMysqlConnect');
      let memoObject = await dbMysqlConnect(updatedState, event);
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM