You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:06:04