[英]Using Mocha/Chai, how can I test a function without actually running it?
[英]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.