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

Cypress API测试:如何让接口返回204或400时测试均通过?

解决方案

1. 修正状态码断言逻辑

你之前用的expect(response.status).to.eq(204||400)无效,是因为JavaScript中204||400会直接返回204(第一个真值),相当于只断言状态码等于204,400的情况自然会失败。正确的做法是断言状态码属于允许的集合:

  • 若使用Chai测试框架:
// 断言状态码是204或400中的一个
expect(response.status).to.be.oneOf([204, 400]);
  • 若使用Jest测试框架:
expect([204, 400]).toContain(response.status);

2. 可选:验证400响应的内容(避免204时报错)

如果需要确保400响应的内容符合预期,不要直接断言response.body——因为204响应通常没有响应体,直接访问会报错。应该先判断状态码,再做对应的断言:

expect(response.status).to.be.oneOf([204, 400]);

// 仅当状态码为400时验证响应体
if (response.status === 400) {
  expect(response.body.error).to.eq('invalidPasswordHistoryMessage');
  expect(response.body.error_description).to.eq('Invalid password: must not be equal to any of last 24 passwords.');
}

3. 确保响应体正确解析

如果之前检查response.body失败,可能是测试框架没有自动解析JSON响应。比如用Supertest时,可手动处理解析:

const response = await request(app)
  .post('/set-password')
  .send({ password: 'your-fixed-password' });

// 仅在400状态下手动解析响应体(若框架未自动处理)
let body;
if (response.status === 400) {
  body = JSON.parse(response.text);
  expect(body.error).to.eq('invalidPasswordHistoryMessage');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:31:02