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

Cypress 13推送AWS EventBridge事件遇Cucumber预处理器错误

适配Cypress 13 + Cucumber的AWS EventBridge事件推送方案

1. 修正Cucumber步骤函数(核心问题)

确保你的Cucumber步骤函数不要使用async/await,直接调用cy.task即可——Cypress命令本身是异步队列化的,不需要手动await。

错误写法(会返回原生Promise,触发报错):

Given('我推送交易事件到EventBridge', async () => {
  await cy.task('seedTx', transactionData);
});

正确写法:

Given('我推送交易事件到EventBridge', () => {
  cy.task('seedTx', transactionData);
});

2. 调整Task处理逻辑(两种可选方式)

方式一:改用回调式处理(彻底避免Promise返回)

修改eventBridge.ts中的insertTxEvents函数,使用Cypress Task支持的回调参数来完成异步通知:

import { EventBridgeClient, PutEventsCommand } from "@aws-sdk/client-eventbridge";

export function insertTxEvents(data: any, done: (error?: Error) => void) {
  const eventBridgeClient = new EventBridgeClient({ region: "你的AWS区域" });
  
  const putEventsCommand = new PutEventsCommand({
    Entries: [
      {
        Source: "你的事件源",
        DetailType: "交易事件",
        Detail: JSON.stringify(data),
        EventBusName: "你的事件总线名称"
      }
    ]
  });

  eventBridgeClient.send(putEventsCommand)
    .then(() => done()) // 任务成功,调用done无参数
    .catch((err) => done(err)); // 任务失败,传递错误给done
}

然后在cypress.config.ts中配置Task时,传入done回调:

import { defineConfig } from "cypress";
import { insertTxEvents } from "./path/to/eventBridge";

export default defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on("task", {
        seedTx: (data, done) => {
          insertTxEvents(data, done);
        }
      });
    },
    // 其他Cucumber相关配置
    specPattern: "cypress/e2e/**/*.feature",
    supportFile: "cypress/support/e2e.ts"
  }
});

方式二:保留async/await但确保Task返回Cypress兼容的Promise

如果不想改回调,可以保留insertTxEvents的async写法,但确保Task直接返回这个Promise(Cypress 13的Task本身支持async函数),同时必须保证步骤函数不是async的:

eventBridge.ts代码不变:

import { EventBridgeClient, PutEventsCommand } from "@aws-sdk/client-eventbridge";

export async function insertTxEvents(data: any) {
  const eventBridgeClient = new EventBridgeClient({ region: "你的AWS区域" });
  
  const putEventsCommand = new PutEventsCommand({
    Entries: [
      {
        Source: "你的事件源",
        DetailType: "交易事件",
        Detail: JSON.stringify(data),
        EventBusName: "你的事件总线名称"
      }
    ]
  });

  await eventBridgeClient.send(putEventsCommand);
}

cypress.config.ts配置:

import { defineConfig } from "cypress";
import { insertTxEvents } from "./path/to/eventBridge";

export default defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on("task", {
        seedTx: insertTxEvents // 直接传入async函数,Cypress会处理Promise
      });
    },
    // 其他Cucumber配置
  }
});

3. 验证方案

运行测试时,Cucumber预处理器不会再检测到原生Promise返回,同时AWS EventBridge的事件推送逻辑正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:52:43