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