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

如何从Cypress API调用中返回自定义类而非Chainable对象?

在Cypress中让API请求函数直接返回自定义类实例而非Chainable是否可行?

首先明确:无法直接同步返回自定义类实例——因为API请求是异步操作,而Cypress的核心命令本身也是异步执行的,不可能在函数调用时立刻拿到结果。但可以通过两种方式实现近似需求,让你能便捷获取自定义类实例:

方式一:用异步函数结合async/await

将函数封装为返回Promise<Car>的异步函数,在测试中通过await获取实例,写法接近同步:

步骤1:定义自定义类

class Car {
  model: string;
  year: number;

  constructor(data: { model: string; year: number }) {
    this.model = data.model;
    this.year = data.year;
  }
}

步骤2:封装异步请求函数

async function getCar(model: string): Promise<Car> {
  // 发送请求并提取响应体
  const responseBody = await cy.request({
    method: "POST",
    url: "api url",
    body: { model },
    headers: {} // 替换为你的实际请求头
  }).then(res => res.body);

  // 将响应体数据转为Car实例
  return new Car(responseBody);
}

测试中使用

it('获取并验证Car实例', async () => {
  const myCar = await getCar('Tesla Model 3');
  expect(myCar.model).to.eq('Tesla Model 3');
});

方式二:封装为Cypress自定义命令

如果习惯Cypress的链式命令风格,可以封装成自定义命令,返回Chainable<Car>,继续保持链式调用:

步骤1:注册自定义命令

Cypress.Commands.add('getCar', (model: string) => {
  return cy.request({
    method: "POST",
    url: "api url",
    body: { model },
    headers: {}
  }).then(response => {
    // 将响应体转为Car实例后返回
    return new Car(response.body);
  });
});

测试中使用

it('获取并验证Car实例', () => {
  cy.getCar('Tesla Model 3').then(car => {
    expect(car.model).to.eq('Tesla Model 3');
  });
});

关键说明

  • 严格意义上的同步返回Car类型是不可能的,因为网络请求必然是异步的,必须等待响应返回才能生成实例。
  • 如果你的Car只是普通对象(而非类实例),可以跳过构造函数步骤,直接返回响应体即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:55:14