Cypress调用cy.task('queryDb')连接MySQL时出现ECONNREFUSED错误
Cypress调用cy.task('queryDb')连接MySQL失败:connect ECONNREFUSED 127.0.0.1:3036
调用Cypress的cy.task('queryDb')执行MySQL查询时,抛出连接拒绝错误,具体报错如下:
connect ECONNREFUSED 127.0.0.1:3036
Node.js内部报错详情:Error: connect ECONNREFUSED 127.0.0.1:3036 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)
相关代码
cypress.config.js
const { defineConfig } = require("cypress"); const mysql = require('mysql') const db = { 'host': '127.0.0.1', "port":"3036", "user":"root", "password":"password", 'database':'db_name' } function queryTestDb(query, config) { // creates a new mysql connection using credentials from cypress.json env's const connection = mysql.createConnection(db); // start connection to db connection.connect(); // exec query + disconnect to db as a Promise return new Promise((resolve, reject) => { connection.query(query, (error, results) => { if (error) reject(error); else { connection.end(); // console.log(results) return resolve(results); } }); }); } module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { on('task',{ queryDb: query => { return queryTestDb(query, config); } }) // implement node event listeners here // implement node event listeners here }, specPattern: "cypress/e2e/*.cy.{js,jsx,ts,tsx}" }, });
测试用例代码
it('Create a Table', function () { cy.task('queryDb', {query:"CREATE TABLE Persons (PersonID int, FirstName varchar(255), Address varchar(255), City varchar(255))"}) })
解决方法
- 修正MySQL端口:MySQL默认监听端口是3306,你配置的是3036,这是常见错误。修改
db对象中的port字段为"3306",或者你的MySQL实际使用的端口号。 - 确认MySQL服务状态:检查本地MySQL服务是否启动:
- Windows:执行
net start mysql - Linux/macOS:执行
systemctl start mysql
- Windows:执行
- 验证连接参数正确性:核对
host、user、password、database是否与本地MySQL配置一致,比如密码是否正确,db_name数据库是否已创建。 - 修复查询逻辑:当前代码存在两处问题:
connection.connect()未处理连接错误,需添加错误捕获- 测试用例传入的是包含
query属性的对象,但queryTestDb直接把整个对象传给connection.query,导致参数错误
修改后的queryTestDb函数:
function queryTestDb(queryObj, config) { const connection = mysql.createConnection(db); return new Promise((resolve, reject) => { // 处理连接错误 connection.connect((connectErr) => { if (connectErr) { reject(connectErr); return; } // 提取query属性执行查询 connection.query(queryObj.query, (queryErr, results) => { // 无论成功失败都关闭连接 connection.end(); if (queryErr) reject(queryErr); else resolve(results); }); }); }); }
内容的提问来源于stack exchange,提问作者Guillermo Gómez Sánchez
相关产品推荐
相关产品推荐

