如何修复Cypress 10+中cypress-sql-server插件的数据库连接错误
解决Cypress 12.8.1连接MsSQL数据库的问题
一、排查cypress-sql-server插件的配置问题
- 确认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)。
- 检查e2e.js命令导入
在cypress/support/e2e.js中确保命令导入正确:
// ES模块格式 import sqlServer from 'cypress-sql-server'; sqlServer.loadDBCommands(); // CommonJS格式 const sqlServer = require('cypress-sql-server'); sqlServer.loadDBCommands();
- 验证数据库连接核心参数
- 服务器地址:远程数据库需确认公网地址/端口(默认1433),本地注意实例名格式(如
.\SQLEXPRESS) - 权限验证:确认账号具备目标数据库的读写/查询权限,SQL Server需开启混合身份验证(若使用SQL账号)
- 网络限制:远程数据库需检查防火墙是否开放1433端口,数据库是否允许外部IP访问
- 修复依赖版本冲突
cypress-sql-server依赖mssql包,高版本mssql可能存在兼容性问题,可锁定兼容版本:
npm install mssql@8.11.0 --save-dev
二、替代方案:直接用mssql包自定义任务
若插件适配问题无法解决,可绕过插件,直接在Cypress任务中调用mssql:
- 安装依赖:
npm install mssql --save-dev
- 在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 } } } } })
- 测试用例中调用任务:
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
相关产品推荐
相关产品推荐

