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

使用Supertest与Jest时,无匹配函数的expect调用来源疑问

解惑:Supertest的.expect vs Jest的expect

没错,你代码里的.expect(200)完全属于Supertest,和Jest的expect是两个独立的工具,功能和用法都不一样。

1. Supertest的.expect是什么?

它是Supertest专门为HTTP请求测试设计的链式断言方法,直接绑定在请求对象上:

  • .expect(200):直接校验HTTP响应的状态码是否为200
  • .expect("Content-Type", /application\/json/):校验响应头的Content-Type是否匹配指定的正则表达式
  • 它内部会自动处理断言逻辑,一旦校验失败就会抛出错误,不需要额外的匹配器。

2. 和Jest的expect的区别

Jest的expect是全局通用断言函数,必须搭配匹配器(比如.toBe()、.toHaveLength())才能完成断言,它可以用来校验任何值,不局限于HTTP测试场景。比如:

expect(200).toBe(200); // Jest的断言,需要匹配器
expect([1,2,3]).toHaveLength(3); // 同样是Jest的断言

3. 为什么两者能一起工作?

你写的测试是在Jest的test块里执行的,当Supertest的.expect校验失败时,会抛出一个异常,Jest会捕获这个异常并标记测试失败;如果所有Supertest的.expect都通过,Jest就会认为整个测试用例通过。

你也可以混合使用两者,比如先拿到响应,再用Jest的断言做更复杂的校验:

test("notes data matches expected", async () => {
  const response = await api.get("/api/notes");
  // 用Jest的expect做复杂断言
  expect(response.body[0].content).toBe("First note");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:15:37