import { defineConfig } from 'cypress'; import mqtt from 'mqtt' function logWithTimestamp(message, ...args) { const timestamp = new Date().toLocaleString(); console.log(`[${timestamp}] ${message}`, ...args); //cy.log(`[${timestamp}] ${message}`); } export default defineConfig({ viewportWidth: 1920, viewportHeight: 1080, e2e: { baseUrl: 'http://localhost:10086/#/pages/index/index', // Adjust this to match your application's base URL // specPattern: '__e2e_test__/**/*.spec.ts', setupNodeEvents(on, config) { on('task', { // 参数:{ broker, topic, payload [, opts] } mqttPublish({ broker = 'ws://localhost:8083/mqtt', topic, payload, qos = 0, retain = false }) { return new Promise((resolve, reject) => { console.log('这里执行了吗') const client = mqtt.connect(broker) client.on('connect', () => { client.publish(topic, payload, { qos, retain }, err => { // console.log(`发布数据--${payload}===broker:${broker}`) logWithTimestamp(`发布数据--${payload}===broker:${broker}`) // 关键:等底层 socket 的 buffer 清空 client.stream.on('drain', () => { client.end(true) // true = 强制 flush 再关闭 logWithTimestamp(`drain发布完成 topic : ${topic}`) resolve(null) }) logWithTimestamp(`发布完成 topic : ${topic}`) if (err) reject(err) else resolve(null) }); }) client.on('error', reject) }) } }) return require('./cypress/plugins/index.js')(on, config); }, }, });