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

如何在Cypress中将.then内的赋值逻辑封装为自定义命令?

封装Cypress自定义命令实现动物信息赋值

步骤1:定义自定义命令

在cypress/support/commands.ts中添加代码,注册自定义命令updateAnimalInfo:

// 推荐写法:将animal对象作为参数传入,避免依赖全局变量
Cypress.Commands.add('updateAnimalInfo', (
  animal: { animalObj: { name: string; randomInfo: string[] } },
  name: string,
  randomInfo: string[]
) => {
  animal.animalObj.name = name;
  animal.animalObj.randomInfo = randomInfo;
});

// 可选写法:若animal是全局变量,可简化为
// Cypress.Commands.add('updateAnimalInfo', (name: string, randomInfo: string[]) => {
//   animal.animalObj.name = name;
//   animal.animalObj.randomInfo = randomInfo;
// });

步骤2:添加TypeScript类型声明(可选但推荐)

在cypress/support/index.d.ts中扩展Cypress类型接口,让TypeScript识别自定义命令:

declare namespace Cypress {
  interface Chainable {
    updateAnimalInfo(
      animal: { animalObj: { name: string; randomInfo: string[] } },
      name: string,
      randomInfo: string[]
    ): Chainable<void>;

    // 对应全局变量版本的类型声明
    // updateAnimalInfo(name: string, randomInfo: string[]): Chainable<void>;
  }
}

步骤3:在测试代码中使用自定义命令

修改原测试代码,直接调用自定义命令完成赋值:

let animal: {
    animalObj: {
        name: string;
        randomInfo: string[]
    }
} = {
    animalObj: {
        name: '',
        randomInfo: ['']
    }
}

cy.request({
    method: 'POST',
    url: '/api/animal',
    body: animal
}).then($el => {
    animal.animalObj = $el.body.Order
    // 调用自定义命令,传入目标对象、名称和信息数组
    cy.updateAnimalInfo(animal, 'Rex', ["Likes to bark!"])
})

之后你只需调用cy.updateAnimalInfo并传入动态的名称和信息数组,就能完成对animal.animalObj属性的赋值操作,无需重复编写赋值逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:13:29