使用mockttp库模拟HTTP服务器和客户端进行单元测试

简介

mockttp 是一个用于在 Node.js 中模拟 HTTP 服务器和客户端的库。它可以帮助我们进行单元测试和集成测试,而不需要实际发送 HTTP 请求。

安装

shell 复制代码
npm install mockttp @types/mockttp

模拟http服务测试

首先导入并创建一个本地服务器实例

typescript 复制代码
import { getLocal } from 'mockttp';
const mockServer = getLocal();

在测试前需要启动服务

typescript 复制代码
mockServer.start(8080);

然后通过mockServer的forGet方法模拟一个GET请求,并设置响应状态码和响应体,这里其实就是我们期望模拟的请求和返回码与内容

typescript 复制代码
await mockServer
  .forGet('/my-mocked-path')
  .thenReply(200, '{"message": "ok"}');

接下来使用fetch方法发送一个请求,然后断言返回的内容是否是我们期望的

typescript 复制代码
const response = await fetch(
  `http://localhost:${mockServer.port}/my-mocked-path`,
);
expect(await response.text()).toEqual('{"message": "ok"}');

最后停止服务

typescript 复制代码
mockServer.stop()

最后,看一个完整的测试例子

my.spec.ts

typescript 复制代码
import { getLocal } from 'mockttp';

const mockServer = getLocal();

describe('Mockttp test', () => {
  beforeEach(() => mockServer.start(8080));
  afterEach(() => mockServer.stop());

  it('test get', async () => {
    await mockServer
      .forGet('/my-mocked-path')
      .thenReply(200, '{"message": "ok"}');

    const response = await fetch(
      `http://localhost:${mockServer.port}/my-mocked-path`,
    );

    expect(await response.text()).toEqual('{"message": "ok"}');
  });

  it('test post', async () => {
    await mockServer
      .forPost('/my-mocked-path')
      .withBody(JSON.stringify({ key: 'value' }))
      .thenReply(200, '{"message": "ok"}');

    const response = await fetch(
      `http://localhost:${mockServer.port}/my-mocked-path`,
      {
        method: 'POST',
        body: JSON.stringify({ key: 'value' }),
      },
    );

    expect(await response.text()).toEqual('{"message": "ok"}');
  });
});
相关推荐
YIAN18 小时前
从 SSE 流式到结构化输出:LangChain 三大 OutputParser 与 ToolCall 方案全实战
前端·langchain·node.js
濮水大叔1 天前
Cabloy全栈框架的两个SSR入口:Vona集成式SSR vs Zova独立式SSR
typescript·node.js·全栈
怕浪猫1 天前
DeepSeek Harness 系列图解
面试·前端框架·node.js
Glitch4041 天前
LLM 数据管线缺陷实录:两个单元测试无法覆盖的运行时问题
单元测试
钱栈up1 天前
全量 21 个失败、单跑全绿:泄漏进连接池的 SQL 变量
sql·单元测试·测试
冬奇Lab1 天前
LLM 自动化测试系列(03):单元测试生成——TestGen-LLM 与 Qodo Cover
人工智能·单元测试·测试
百万蹄蹄向前冲1 天前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
前端snow1 天前
ai agent--- 后端概念补充:Docker Compose、ElasticSearch、IK、BM25等
node.js
EdgeEcho1 天前
Node 里那个"只解第一帧"的坑,我用 172 行代码绕过去了
node.js
光影少年1 天前
Redis + Node 如何支撑百万级并发
redis·后端·node.js