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

Cypress导入MySQL连接文件报错:runTests未定义

问题解决:Cypress导入MySQL连接模块时出现Cannot read properties of undefined (reading 'runTests')错误

问题原因

你的mysql-db-connect.js文件存在两个关键问题,导致模块导入时直接执行报错,进而引发Cypress的runTests相关错误:

  • 顶层代码调用未定义变量:文件最后一行直接执行queryTestDb("select * from test LIMIT 5", pool),但pool变量在该文件内并未声明。模块导入时会立即执行所有顶层代码,这段调用会抛出变量未定义的错误,导致整个模块加载失败。
  • 缺少MySQL模块的正确导入:代码中使用了createPool.createConnection,但未导入mysql或mysql2相关模块,即使本地测试时该变量全局可用,在Cypress环境下会直接导致createPool未定义。

解决方案

1. 修正mysql-db-connect.js代码

移除顶层的测试调用,补充MySQL模块导入,确保模块仅导出功能函数,不执行顶层异步操作:

// 导入mysql模块(根据实际使用的mysql/mysql2调整)
const mysql = require('mysql');
// 若使用mysql2的Promise版本更适配Cypress异步流程,可改用:
// const mysql = require('mysql2/promise');

function queryTestDb(query, poolConfig) {
    // 创建单个数据库连接(若需连接池可改用mysql.createPool)
    const connection = mysql.createConnection(poolConfig);

    return new Promise((resolve, reject) => {
        connection.connect((connectErr) => {
            if (connectErr) {
                connection.end();
                return reject(connectErr);
            }
            
            connection.query(query, (error, results) => {
                connection.end(); // 无论成功失败都关闭连接
                if (error) reject(error);
                else resolve(results);
            });
        });
    });
}

// 仅导出函数,移除顶层测试调用
module.exports = { queryTestDb };

2. 统一模块导入格式(可选)

如果你的Cypress配置支持ES模块,可将mysql-db-connect.js的导出改为ES格式:

export const queryTestDb = function(query, poolConfig) {
    // ... 函数内容同上
}

若仍有导入问题,改用CommonJS的require语法:

const { queryTestDb } = require('../../../support/utility/mysql-db-connect.js');

3. 安装MySQL依赖

确保项目已安装所需的MySQL模块:

npm install mysql --save-dev
# 或使用mysql2
npm install mysql2 --save-dev

验证修正

修改完成后,步骤定义中的Given钩子调用queryTestDb将不再出现导入错误,Cypress可正常加载模块并执行数据库查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:55:28