Node.js中如何mock SQL Server连接池以完成DAL功能测试
问题原因
你当前的mock中,ConnectionPool构造函数返回的实例仅包含request方法,缺少真实mssql库中ConnectionPool实例必须的connect方法,所以调用new sql.ConnectionPool(config).connect()时会抛出方法不存在的错误。同时原mock文件中不需要额外调用jest.mock('mssql'),__mocks__目录下的文件本身就是Jest识别的手动mock文件。
修复后的mock实现
替换你的__mocks__/mssql.js为以下代码即可:
// 模拟SQL执行相关方法,可根据测试需求自定义返回值 const mockExecute = jest.fn(); const mockInput = jest.fn(() => ({ execute: mockExecute })); // 如果你用query方法执行SQL,可自行补充query的模拟逻辑 const mockRequest = jest.fn(() => ({ input: mockInput, query: jest.fn() })); const mssql = { ConnectionPool: jest.fn(() => { const poolInstance = { request: mockRequest, // 补充connect方法,返回resolve当前pool实例的Promise,匹配真实库逻辑 connect: jest.fn(() => Promise.resolve(poolInstance)) }; return poolInstance; }), NVarChar: jest.fn() }; module.exports = mssql;
补充测试场景说明
- 如果需要验证连接失败的异常分支逻辑,可以把
connect方法的返回值修改为Promise.reject(new Error('数据库连接失败')) - 可以通过给
mockExecute/mockQuery设置自定义返回值,覆盖DAL层不同的业务返回场景测试
内容的提问来源于stack exchange,提问作者Ian MacRae
相关产品推荐
相关产品推荐

