Javascript Sinon单元测试MySQL连接

Javascript Sinon单元测试MySQL连接,javascript,mysql,unit-testing,aws-lambda,sinon,Javascript,Mysql,Unit Testing,Aws Lambda,Sinon,我正在尝试对AWS节点Lambda进行单元测试。我正在使用MySQL。我有一个实用程序文件来获取MySQL连接池,它是我的处理程序中的一个依赖项。我试图通过摩卡和西农对我的处理器进行单元测试。我想存根或模拟数据库池和连接,而不实际创建数据库连接或访问数据库,但我没有任何运气。有人知道如何做到这一点吗?我创建了以下两个文件作为测试线束: dbConn.js getEmployees.js 以下是单元测试解决方案: dbConn.js: const mysql=requiremysql2/promi

我正在尝试对AWS节点Lambda进行单元测试。我正在使用MySQL。我有一个实用程序文件来获取MySQL连接池,它是我的处理程序中的一个依赖项。我试图通过摩卡和西农对我的处理器进行单元测试。我想存根或模拟数据库池和连接,而不实际创建数据库连接或访问数据库,但我没有任何运气。有人知道如何做到这一点吗?我创建了以下两个文件作为测试线束:

dbConn.js

getEmployees.js


以下是单元测试解决方案:

dbConn.js:

const mysql=requiremysql2/promise; 异步函数getPooloptions={}{ return wait mysql.createpooloptions克隆; } module.exports={ getPool, }; getEmployees.js:

const database=require./dbConn; exports.handler=异步函数事件、上下文、回调{ 常量dbOptions={}; 让pool=await database.getPooldbOptions; 让conn=wait pool.getConnection; const dbResult=await conn.queryselect*from employees; 控制释放; 返回结果; }; getEmployees.test.js:

const{handler}=require./getEmployees.js; const database=require./dbConn; const sinon=要求; const{expect}=requirechai; 描述员工,=>{ 之后=>{ 恢复; }; 它应该通过,异步=>{ constconnstub={query:sinon.stub.resolves{rowCount:1},release:sinon.stub}; const poolStub={getConnection:sinon.stub.resolvesconnStub}; sinon.stubdatabase,getPool.resolvespool stub; const实际=等待处理程序; expectactual.to.be.eql{rowCount:1}; sinon.assert.calledWithdatabase.getPool,{}; sinon.assert.calledOncepoolStub.getConnection; sinon.assert.calledWithconnStub.query,从employees中选择*; sinon.assert.calledOnceconnStub.release; }; }; 单元测试结果和覆盖率报告:

雇佣员工 ✓ 应该通过 1通过13毫秒 -----------|-----|-----|-----|-----|----------| 文件|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行| -----------|-----|-----|-----|-----|----------| 所有文件| 96.43 | 0 | 80 | 96.43 || dbConn.js | 66.67 | 0 | 0 | 66.67 | 4| getEmployees.js | 100 | 100 | 100 | 100 || getEmployees.test.js | 100 | 100 | 100 | 100 || -----------|-----|-----|-----|-----|----------|
源代码:

这太棒了!像冠军一样工作。谢谢你把这些放在一起
const mysql = require('mysql2/promise');

async function getPool(options = {}) {
  return await mysql.createPool(optionsClone);
}

module.exports = {
  getPool
};
const database = require('./dbConn');

exports.handler = async function(event, context, callback) {
  // Connect to a database via connection pool
  let pool = await database.getPool(dbOptions);
  let conn = await pool.getConnection();

  const dbResult = await conn.query('select * from employees');

  conn.release();

  return dbResult;
};