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

如何修复Cypress 10+中cypress-sql-server插件的数据库连接错误

解决Cypress 12.8.1连接MsSQL数据库的问题

一、排查cypress-sql-server插件的配置问题

  1. 确认cypress.config.js配置格式
    Cypress 10+采用ES模块配置结构,需保证数据库配置参数正确:
import { defineConfig } from 'cypress'
import sqlServer from 'cypress-sql-server';

export default defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      const tasks = sqlServer.loadDBPlugin(config.env.db);
      on('task', tasks);
    },
    env: {
      db: {
        userName: '你的数据库用户名',
        password: '你的数据库密码',
        server: '服务器地址', // 本地示例:localhost 或 .\SQLEXPRESS
        options: {
          database: '目标数据库名',
          encrypt: true, // Azure SQL需开启,本地可根据情况调整
          trustServerCertificate: true // 本地SQL Server常需开启以绕过证书验证
        }
      }
    }
  }
})

若项目未启用ES模块(package.json无"type": "module"),需改用CommonJS格式(require替代import)。

  1. 检查e2e.js命令导入
    在cypress/support/e2e.js中确保命令导入正确:
// ES模块格式
import sqlServer from 'cypress-sql-server';
sqlServer.loadDBCommands();

// CommonJS格式
const sqlServer = require('cypress-sql-server');
sqlServer.loadDBCommands();
  1. 验证数据库连接核心参数
  • 服务器地址:远程数据库需确认公网地址/端口(默认1433),本地注意实例名格式(如.\SQLEXPRESS)
  • 权限验证:确认账号具备目标数据库的读写/查询权限,SQL Server需开启混合身份验证(若使用SQL账号)
  • 网络限制:远程数据库需检查防火墙是否开放1433端口,数据库是否允许外部IP访问
  1. 修复依赖版本冲突
    cypress-sql-server依赖mssql包,高版本mssql可能存在兼容性问题,可锁定兼容版本:
npm install mssql@8.11.0 --save-dev

二、替代方案:直接用mssql包自定义任务

若插件适配问题无法解决,可绕过插件,直接在Cypress任务中调用mssql:

  1. 安装依赖:
npm install mssql --save-dev
  1. 在cypress.config.js定义自定义查询任务:
import { defineConfig } from 'cypress'
import sql from 'mssql';

export default defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('task', {
        async queryDatabase(query) {
          const dbConfig = {
            user: config.env.db.userName,
            password: config.env.db.password,
            server: config.env.db.server,
            database: config.env.db.options.database,
            options: {
              encrypt: config.env.db.options.encrypt,
              trustServerCertificate: config.env.db.options.trustServerCertificate
            }
          };

          try {
            const pool = await sql.connect(dbConfig);
            const result = await pool.request().query(query);
            await pool.close();
            return result.recordset;
          } catch (error) {
            console.error('数据库查询失败:', error);
            throw error;
          }
        }
      });
    },
    env: {
      db: {
        userName: '你的数据库用户名',
        password: '你的数据库密码',
        server: '服务器地址',
        options: {
          database: '目标数据库名',
          encrypt: true,
          trustServerCertificate: true
        }
      }
    }
  }
})
  1. 测试用例中调用任务:
it('验证数据库查询结果', () => {
  cy.task('queryDatabase', 'SELECT TOP 1 * FROM 你的表名').then((result) => {
    expect(result.length).to.be.greaterThan(0);
  });
});

三、常见错误快速排查

  • ECONNREFUSED:检查SQL Server服务是否启动,端口是否与配置一致
  • Login failed for user:核对账号密码,确认SQL Server开启混合身份验证
  • 证书链不受信任:在数据库配置中添加trustServerCertificate: true

内容的提问来源于stack exchange,提问作者zednic20

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:52:57