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
相关产品推荐
相关产品推荐

