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

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
  • 验证连接参数正确性:核对host、user、password、database是否与本地MySQL配置一致,比如密码是否正确,db_name数据库是否已创建。
  • 修复查询逻辑:当前代码存在两处问题:
    1. connection.connect()未处理连接错误,需添加错误捕获
    2. 测试用例传入的是包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:35:27