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

Cypress中无法验证接口响应值:responseCode返回undefined问题排查

问题分析与解决

翻译后的问题描述

我正在使用Cypress验证接口响应中key的值,期望验证responseCode等于400,但该值返回undefined。我使用的测试逻辑如下:

describe("Veriy Login", () => {
  context("Verify Login", () => {
    it("Verify User Login", () => {
      cy.request({
        method: "POST",
        url: "https://automationexercise.com/api/verifyLogin?email=login_user_123@test.com&password=Test@12345",
      }).should((response) => {
        expect(response.status).to.eq(200);
        expect(response
            .body.responseCode)
        .to.eq(400);
      });
    });
  });
});

在Cypress运行器中执行后,返回的响应如下:

{
    "responseCode": 400,
    "message": "Bad request, email or password parameter is missing in POST request."
}

请问我哪里操作有误?

问题原因

  1. 参数传递方式错误:你使用POST请求,但将email和password放在了URL的查询参数中,而该接口要求POST参数需放在请求体(body)内,因此接口提示参数缺失。
  2. 响应解析问题:由于接口未正确识别参数,返回的响应可能未设置Content-Type: application/json头,导致Cypress无法自动将响应体解析为JSON对象,此时response.body实际是字符串,访问response.body.responseCode自然会得到undefined。

解决方法

方法一:规范传递POST参数(推荐)

将参数放到请求体中,符合POST接口的参数传递规范,同时确保Cypress能正确解析响应:

describe("Verify Login", () => {
  context("Verify Login", () => {
    it("Verify User Login", () => {
      cy.request({
        method: "POST",
        url: "https://automationexercise.com/api/verifyLogin",
        // 以JSON格式传递参数,若接口要求form-data则改用form属性
        body: {
          email: "login_user_123@test.com",
          password: "Test@12345"
        },
        // 若接口要求form-urlencoded格式,添加此header
        // headers: {
        //   "Content-Type": "application/x-www-form-urlencoded"
        // }
      }).should((response) => {
        expect(response.status).to.eq(200);
        expect(response.body.responseCode).to.eq(400);
      });
    });
  });
});

方法二:手动解析响应体(不推荐,仅适配错误传参场景)

如果必须保留URL传参的方式,手动将响应体字符串解析为JSON对象后再验证:

describe("Verify Login", () => {
  context("Verify Login", () => {
    it("Verify User Login", () => {
      cy.request({
        method: "POST",
        url: "https://automationexercise.com/api/verifyLogin?email=login_user_123@test.com&password=Test@12345",
      }).should((response) => {
        expect(response.status).to.eq(200);
        const parsedBody = JSON.parse(response.body);
        expect(parsedBody.responseCode).to.eq(400);
      });
    });
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:34